Как подключить boost qt
Перейти к содержимому

Как подключить boost qt

  • автор:

как в QtCreator подключить Boost::asio?

Видать линкер не может чего-то найти, а чего не может не говорит.

undefined reference to boost::system::generic_category() undefined reference to boost::system::generic_category() undefined reference to boost::system::generic_category() undefined reference to boost::system::generic_category() undefined reference to boost::system::generic_category() undefined reference to pthread_key_create undefined reference to pthread_key_delete . . 

гуглил, по результатам добавил

LIBS += -lboost_system 

Стало так cannot find -lboost_system

yum install boost148-system

Package boost148-system already installed 🙁

Подключить boost к QT Creator

подключить boost !
пока модераторы не перекинули мою тему в другую тему может кто знает?)))) не могу подключить буст.

QT Creator/подключить QML/работать по id
Здравствуйте. Делаю проект с QML — будет и в других отчетах. Знаю что *.exe можно с опциями.

Подключить библиотеку для Qt Creator
Есть библиотека фильтра Калмана, ее не удается подключить к проекту. Добавить ее через mingv не.

Как подключить телефон к qt creator
Делаем мобильное приложение под ios и Android на qt. И у меня такой вопрос: как подключить iphone.

495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557

Лучший ответ

Сообщение было отмечено Avazart как решение

Решение

В pro файле прописать примерно такое:

1 2 3 4 5 6 7 8 9 10 11 12 13
BOOST_ROOT = C:\msys64\boost INCLUDEPATH += $$ \include #BOOST LIBRARY: LIBS += -L$$ \lib #LIBS += -lboost_filesystem #LIBS += -lboost_thread #LIBS += -lboost_serialization LIBS += -lboost_regex LIBS += -lboost_date_time #LIBS += -lboost_locale #LIBS += -lboost_chrono LIBS += -lboost_system

Если используешь cmake, то в CMakeLists.txt прописать примерно такое:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
cmake_minimum_required(VERSION 3.4) set(PROJECT Cyberforum) project($ ) set(CMAKE_CXX_FLAGS "$ -std=c++14") set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") set(SOURCE_FILES main.cpp header.h) #Boost library set(BOOST_ROOT "C:/msys64/boost") set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost 1.60.0 COMPONENTS regex filesystem system REQUIRED) if(Boost_FOUND) message(STATUS "Boost_INCLUDE_DIRS: $ ") message(STATUS "Boost_LIBRARIES: $ ") message(STATUS "Boost_VERSION: $ ") include_directories($ ) add_executable($ $ header.h) target_link_libraries($ $ ) endif()

Как добавить собранную из исходников библиотеку boost в qt creator на linux

введите сюда описание изображения

После сборки в директории libs появилось 2 новые директории, include и lib соответственно. Далее я прописал в pro файле qt creatora путь к boost

TEMPLATE = app CONFIG += console c++17 CONFIG -= app_bundle CONFIG -= qt SOURCES += \ main.cpp INCLUDEPATH += I-/libs/include/boost LIBS += -L/libs/lib 

введите сюда описание изображения

По идее, я указал путь и к хедерам(include/boost) и к бинарникам (lib), но тем не менее, при попытке скомпилировать тестовый код, я получаю набор ошибок. Как правильно прописать pro файл на линуксе, где я ошибся? (набор ошибок)

Установка Boost под Qt

Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.

Материал подготовлен на примере Qt 15.0, Visual Studio 2019 16.5.4, Boost 1.73.0, Windows 10. Папка Boost после компиляции под MinGW x86-x64, Visual Studio x86-x64 у меня занимает 22,9 ГБ.

У меня со времени C++ Builder 6 стойкая нелюбовь к непереносимым библиотекам в языках программирования. Это когда нужно при переносе проекта в среде разработке что-то дополнительно настраивать и устанавливать. По этой же причине не люблю Boost. Но пришлось недавно им заняться.

Подготовка

На сайте https://www.boost.org/ скачиваем последнюю версию библиотеки Boost:

Главная страница библиотеки

Архив последней версии библиотеки

Распакуем архив куда-нибудь и переименуем папку в boost . Я распаковал в корень диска C:\boost :

Файлы из распаковываемого архива

Работаем с Qt

Собираем библиотеку Boost тем компилятором, которым компилируем наши проекты, где будем использовать Boost.

Под каждый компилятор вам нужно собирать библиотеку отдельно!

Для Qt под MinGW 32 бита нам потребуется программа gcc.exe .

У меня этот файл находится в папке:

D:\Qt\Tools\mingw730_32\bin 

На время добавим этот путь в системную переменную Path на примере Windows 10:

Переходим в настройки компьютера

Выбор пункта «Дополнительные параметры системы»

Выбора пункта «Переменные среды»

Выбор системной переменной Path

Добавление нового пути в переменной Path

Соглашение с изменением через нажатие кнопки «OK»

Соглашение с изменением через нажатие кнопки «OK»

Сборка для Qt под MinGW 32 бита

Вызываем командную строку. Это сделать можно разными способами. Например, жмем Win + R . Там вводим cmd и жмем Enter .

А можно через поиск:

Вызов командной строки

Вводим команду для перехода в папку, где располагается распакованный Boost:

cd C:\boost 

Переход в папку с распакованным Boost

Вводим следующую команду. И ждем, когда всё выполнится:

bootstrap.bat gcc 

Результат выполнения команды bootstrap.bat gcc

Вы библиотеку Boost возможно будете собирать под разные версии компиляторов на одном компе. Поэтому в следующей команде укажите название папки, которая создаться в папке C:\boost , куда будут закинуты собранные файлы. Для MinGW 32bit папку назвал boost_mingw730_32 .

Вводим команду (не забудьте поменять название папки на вашу версию компилятора). И ждем, когда всё выполнится (а вот это будет не быстро):

b2 toolset=gcc link=shared --prefix=boost_mingw730_32 install 

И через долгое время (у меня ушло более 20 минут) библиотека соберется:

Результат компилирования библиотеки

Кстати, эту команду можно ускорить, указав параметр -j8 , где число будет обозначать на скольких ядрах процессора будет происходить компилирование (правда у меня не сильно скорость увеличилась):

b2 toolset=gcc link=shared -j8 --prefix=boost_mingw730_32 install 

Итак, у нас у меня в папке C:\boost\boost_mingw730_32 собранная библиотека, которую я теперь могу использовать.

Не забудьте удалить путь к gcc.exe из переменной Path . Если вы не удалите, то ничего страшного не случится, но в будущем, когда под другой компилятор или другой версии текущего компилятора будете собирать Boost, возникнут проблемы.

И вам нужно удалить только один путь из переменной Path. Не вздумайте удалить всю переменную Path! Это приведет к очень плохим последствиям:

Удаление пути к компилятору

Сборка для Qt под MinGW 64 бита

Для MinGW 64 бит повторяем всё тоже самое, но указываем другой путь к компилятору (у меня это D:\Qt\Tools\mingw730_64\bin ) и указываем другую папку для сборки (например, boost_mingw730_64 ).

После указания пути к компилятору в переменной в Path в консоли последовательно вызываем команды:

cd C:\boost bootstrap.bat gcc b2 toolset=gcc link=shared --prefix=boost_mingw730_64 install 

Результат компилирования библиотеки

Не забудьте удалить путь к gcc.exe из переменной Path .

Сборка для Qt под Visual Studio 32 бит

И если сборка под MinGW прошла без проволочек, то со сборкой под Visual Studio я намучился.

У меня стоит сразу две версии Qt: под MinGW и под Visual Studio ( QWebEngine работает только под Visual Studio).

Тут вместо gcc.exe будет нужен файл cl.exe . У меня стоит Visual Studio 2019, и данный файл находится в папке:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx86\x86\ 

Добавляем этот путь временно в системную переменную Path .

Также нам потребуется знание версии компилятора Visual Studio. Она не совпадает с названием установленной Visual Studio! Получить это значение можно из Visual Studio Installer:

Visual Studio Installer

Через поиск msvc находим установленный компилятор:

Найденный компонент

Нам потребуется как значение v142 . Последовательно в cmd вызываем команды:

cd C:\boost bootstrap.bat vc142 b2 toolset=msvc-14.2 --build-type=complete --prefix=boost_vs2019_32 install 

Обратите внимание, что в командах используется значение v142 дважды в vc142 и msvc-14.2 . И не забываем поменять название папки для собранной библиотеки Boost:

Результат выполнения команды bootstrap.bat vc142

Результат выполнения сборки

Сборка для Qt под Visual Studio 64 бита

Для MinGW повторяем всё тоже самое, но указываем другой путь к компилятору и указываем другую папку для сборки (например, boost_vs2019_64 ), а также указываем, что собираем именно под x64 ( —address-model=64 ). У меня компилятор под x64 располагается тут:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\bin\Hostx64\x64 

После указания пути к компилятору в переменной в Path в консоли последовательно вызываем команды:

cd C:\boost bootstrap.bat vc142 b2 toolset=msvc-14.2 --build-type=complete --address-model=64 --prefix=boost_vs2019_64 install 

Результат выполнения сборки

Подготовка Qt проекта

Создадим простой проект с виджетами с кнопкой PushButton и полем для вывода текста TextEdit . Для тех, кто не знает — скриншоты по под спойлером:

Создание нового проекта

Выбор Qt Widgets Application

Выбор имени проекта и его расположения

Выбор системы сборки

Выбор названия главного класса приложения

Настройка перевода приложения

Выбор компиляторов сборки

Настройка системы контроля версий проекта

Переход на форму приложения

Размещение компонентов на форме

Переход на обработчик клика кнопки

Выбор типа события кнопки

Метод обработки клика кнопки

Подготовка для работы с MinGW 32 бита

Идем в файл проекта .pro :

Файл проекта

Там подключите Boost библиотеку (не забудьте поменять пути на свои). В коде ниже есть раздел как для MinGW, так и под Visual Studio, причем под две битности x86 и x64:

greaterThan(QT_MAJOR_VERSION, 4)  TARGET_ARCH=$$ > else  TARGET_ARCH=$$ > contains(TARGET_ARCH, x86_64)  ARCHITECTURE = x64 > else  ARCHITECTURE = x86 > win32-g++:contains(ARCHITECTURE, x86):  INCLUDEPATH += C:/boost/boost_mingw730_32/include/boost-1_73 > win32-g++:contains(ARCHITECTURE, x64):  INCLUDEPATH += C:/boost/boost_mingw730_64/include/boost-1_73 > win32-msvc*:contains(ARCHITECTURE, x86)  INCLUDEPATH += C:/boost/boost_vs2019_32/include/boost-1_73 > win32-msvc*:contains(ARCHITECTURE, x64)  INCLUDEPATH += C:/boost/boost_vs2019_64/include/boost-1_73 > 

Файл проекта с подключением Boost

Обратите внимание на то, в какую сторону повернуты слэши.

Пути к папкам поменяйте на свои:

Пути к скомпилированным версиям Boost

В дальнейшем вам нужно будет добавлять тут еще библиотеки, которые вы будете использовать. Подключаете их через LIBS .

Если вы не подключите их, то будете видеть подобные ошибки (по ошибкам и определяете, какие файлы нужно подключить):

Ошибка подключения файла библиотеки Boost

Для примеров ниже мне нужно было добавить библиотеки, и полный кусок добавляемого кода в *.pro файл выглядит так:

greaterThan(QT_MAJOR_VERSION, 4)  TARGET_ARCH=$$ > else  TARGET_ARCH=$$ > contains(TARGET_ARCH, x86_64)  ARCHITECTURE = x64 > else  ARCHITECTURE = x86 > win32-g++:contains(ARCHITECTURE, x86):  INCLUDEPATH += C:/boost/boost_mingw730_32/include/boost-1_73 LIBS += "-LC:/boost/boost_mingw730_32/lib" \ -llibboost_date_time-mgw7-mt-x32-1_73 \ -llibboost_system-mgw7-mt-x32-1_73 > win32-g++:contains(ARCHITECTURE, x64):  INCLUDEPATH += C:/boost/boost_mingw730_64/include/boost-1_73 LIBS += "-LC:/boost/boost_mingw730_64/lib" \ -llibboost_date_time-mgw7-mt-x64-1_73 \ -llibboost_system-mgw7-mt-x64-1_73 > win32-msvc*:contains(ARCHITECTURE, x86)  INCLUDEPATH += C:/boost/boost_vs2019_32/include/boost-1_73 LIBS += "-LC:/boost/boost_vs2019_32/lib" \ -llibboost_date_time-vc142-mt-x32-1_73 \ -llibboost_system-vc142-mt-x32-1_73 > win32-msvc*:contains(ARCHITECTURE, x64)  INCLUDEPATH += C:/boost/boost_vs2019_64/include/boost-1_73 LIBS += "-LC:/boost/boost_vs2019_64/lib" \ -llibboost_date_time-vc142-mt-x64-1_73 \ -llibboost_system-vc142-mt-x64-1_73 > 

Подключение библиотеки Boost

Обратите внимание, что перед путями и названием библиотеки появляется -L или -l :

Пути к файлам Boost

Если вам нужно подключить несколько библиотек, то добавляете их подобным образом:

Обратите внимание на то, что для разных компиляторов одна и та же библиотека, например, libboost_date_time хранится в разных файлах, например с названием (без расширения) libboost_date_time-mgw7-mt-x32-1_73 и libboost_date_time-vc142-mt-x32-1_73 .

Если после внесения изменений и сохранения файла у вас кнопка запуска проекта горит зеленым, то всё прошло хорошо. Если серым, то где-то напортачили:

Кнопка запуска приложения

Перейдем в файл mainwindow.cpp :

Файл mainwindow.cpp

Проверка № 1

Выведем седьмое простое число через функцию prime() . Функция является одной из специальных математических функций.

Подключаем заголовочный файл и соответствующее пространство имен:

#include using namespace boost::math; 

Теперь в коде клика кнопки можем прописать:

// Седьмое простое число boost::uint32_t k = prime(7); ui->textEdit->insertPlainText(QString::number(k) + "\n"); 

Результат выполнения программы

Если возникнет такая ошибка, то повторно запустите процесс компиляции программы:

Ошибка при компиляции программы

Проверка № 2

Проверим сколько дней прошло с 1 января.

Подключаем заголовочный файл и соответствующее пространство имен:

#include using namespace boost::gregorian; 

Теперь в коде клика кнопки можем прописать:

// Сколько дней прошло с 1 января date today = day_clock::local_day(); partial_date new_years_day(1,Jan); days days_since_year_start = today - new_years_day.get_date(today.year()); ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + "\n"); 

Результат выполнения программы

#include "mainwindow.h" #include "ui_mainwindow.h" #include #include  using namespace boost::math; using namespace boost::gregorian; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow)  ui->setupUi(this); > MainWindow::~MainWindow()  delete ui; > void MainWindow::on_pushButton_clicked()  // Седьмое простое число boost::uint32_t k = prime(7); ui->textEdit->insertPlainText(QString::number(k) + "\n"); // Сколько дней прошло с 1 января date today = day_clock::local_day(); partial_date new_years_day(1,Jan); days days_since_year_start = today - new_years_day.get_date(today.year()); ui->textEdit->insertPlainText(QString::number(days_since_year_start.days()) + "\n"); > 

Исходники проекта прикреплены к статье.

  • Boost.png by Zoltan Juhasz / (2020-05-07)

Статья обновлена 2020-05-12

Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.

Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.

Harrix

  • GitHub User
  • TODO@mail.ru

Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *