Как установить библиотеку boost?
Библиотека boost — это набор частично компилируемых исходных кодов. В некоторых случаях ничего не нужно собирать, достаточно скачать с официального сайта дистрибутив, разместить в удобном месте и в настройках проекта указать пути.
У меня в специальной папке, где я храню библиотеки многоразового использования, лежит подпапка boost_1_56_0 . Рядом с нею еще ряд других более старых версий этой библиотеки.
В переменные среды (в windows это там же, где и PATH) я заношу переменную BOOST_ROOT , которая указывает на последнюю сборку. Т.е. как появится новая, я создам папку boost_1_XX_Y и переназначу эту переменную.
В настройках любых проектов мне достаточно указать $(BOOST_ROOT)\include — для доступа к headers, и $(BOOST_ROOT)\stage\lib32 / $(BOOST_ROOT)\stage\lib64 для доступа к конкретным библиотекам, нужной мне разрядности.
Поскольку boost автоматически выдает имена собираемым библиотекам, с учетом компиляторов, которыми они собираются, даже если у Вас разные компиляторы, бинарники удобно сбрасывать в одну папку, как указано выше.
- С Intel Compiler у Вас получатся libboost_name-iw-type-version.lib .
- С Visual Studio у Вас получатся libboost_name-vcXX-type-version.lib , где XX — версия компилятора visual studio (не студии, а именно компилятора).
- С MinGW с gcc у Вас получится libboost_name-gcc-type-version.lib , если мне не изменяет память.
При этом для сборки библиотек, которые необходимо собирать, необходимо выполнить одни и те же действия в консоли:
- Для Intel Compiler это будет в соответствующем Command Prompt.
- Для Visual Studio это будет в соответствующем Command Prompt.
- Для MinGW это будет в обычной консоли, если, конечно, путь к bin в MinGW у Вас добавлен в переменную среды PATH.
Действия надо выполнить одни и те же. Сначала bootstrap.bat , а потом b2 —help .
В хелпе b2 Вы увидите все варианты настройки сборки, чтобы собрать наиболее удобным Вам образом.
Строчка будет выглядеть так:
b2 параметр1 параметр2 параметр3 .
- toolset — его стоит указать, чтобы сборка производилась конкретным компилятором (gcc, intel, visual studio), причем можно указать и версию компилятора.
- variant, вид сборки, debug или release. Для разработки Вам понадобятся оба варианта.
- link — Вы выбираете, будет Ваш бинарный код обращаться в dll или содержать «в себе» все используемые алгоритмы.
- threading — честно говоря, плохо понимаю смысл этой директивы и всегда указываю multi. Редко мы пишем однопоточные приложения.
- runtime-link — то же, что и link, только для рантайма.
- address-model — параметр не указан в хелпе, но помогает выбрать архитектуру собираемых библиотек.
- stage/install, отличаются лишь тем, что install позволит «выгрузить» только нужное в отдельную папку, stage собирает всё туда, где оно есть. Если Вы не увлекаетесь изменениями исходников boost, stage Вам вполне подойдет.
В итоге получается что-то вроде вот такого:
Для дебага в x32 и такого:
Для релиза в x32.
Ждете около 40 минут, радуетесь результату. В случае проблем — гуглите, скорее всего уже тысячи людей сталкивались с Вашей проблемой, и ее решение — невнимательность или какие-то специфические настройки чего-нибудь. Например, при сборке boost python вылезает много warning-ов на MinGW из-за конфликта хедеров, подобные вещи можно разрулить в частном порядке.
Потратив 2 часа на то, чтобы один раз в этом разобраться, Вы никогда не будете зависеть ни от каких сторонних сборок, будете понимать, где у Вас что лежит, кто туда положил и т.п. В общем, это полезно.
Boost.Asio C++ Tutorial
Тем, кто не знает, что такое Boost.Asio, посвящается. Boost.Asio — это кросс-платформенная библиотека С++ для сетевого и низкоуровневого ввода-вывода программирования, которая предоставляет разработчикам, использующим асинхронную модель, современный подход программирования на С++. В нашем случае это будет С++11.
Версия Boost, которую я использую — Boost Version 1.60.0. Скачать можно тут.
Опираясь на свой опыт, хотелось бы сразу решить вопрос с установкой библиотеки. Я использую MVS 15, следовательно ставить Boost мы будем туда.
Установка библиотеки
- После скачивания архива с библиотекой, распаковываем его на Локальный диск (лучше) С.
- Открываем папку boost_1_60_0 и запускаем файл bootstrap.bat
- После того как bootstrap.bat отработает, в папке появится файл b2.exe
- Запускаем b2.exe и ждем от 5 минут до 1,5 часа (зависит от «машины»)
- Когда b2.exe отработает, ваша библиотека будет в собранном состоянии, осталось только её подключить в нашу IDE.
- Запускаем MVS, в вкладке «Вид» находим Property Manager
- Двойным кликом открываем страницу свойств папки Debug | Win32 и кликаем на VC++ Directories
- В колонке Include Directories выбираем изменить, далее нажимаем на «папку со *» New Line и указываем ей путь к папке boost_1_60_0, жмём ОК.
- Проводим аналогию с некоторыми изменениями для колонки Library Directoties, но для неё указываем путь C:\boost_1_60_0\stage\lib, жмём ОК.
- Библиотека подключена!
Basic Skills
Первые пять уроков, или как они называются в учебнике Timer, будут вводными в фундаментальные понятия, необходимые для использования инструмента Asio. Перед тем, как погрузиться в сложный мир сетевого программирования, эти Timers (уроки) иллюстрируют базовые навыки, используя простые асинхронные таймеры.
Урок 1. — Использование синхронного таймера. «Timer.1 — Using a timer synchronously«
Этот урок вводит нас в Asio, показывая, как выполняется ожидание по таймеру. Начнём мы с подключения заголовочных файлов. Все Asio классы представлены в виде файлов с расширением Asio.hpp.
Так как в этом примере мы используем таймеры, то мы должны включить соответствующий файл заголовка Boost.Date_Time.
Все программы, которые используют Asio, должны иметь, по крайней мере, один объект io_service. Этот класс обеспечивает доступ к функциям ввода / вывода. Мы объявляем объект этого типа первым делом в главной функции. Но перед этим я хотел бы немного облегчить написание нашего кода, при помощи пространства имени. После всех подключенных ЗФ, пишем:
Думаю тут особо вопросов не должно возникнуть.
Далее мы объявляем объект типа deadline_timer. Основные классы Asio, которые обеспечивают функции ввода/вывода (или как в данном случае функциональность нашего Таймера) всегда берут ссылку на io_service в качестве первого аргумента конструктора. Второй аргумент конструктора установка таймера 5 секунд.
В этом простом примере мы выполняем блокирующие ожидание по таймеру. То есть, вызов deadline_timer :: wait () не вернется, пока таймер не отсчитает 5 секунд после того, как он был создан. Deadline timer, всегда находится в одном из двух состояний: «истек»(expired)или «не истек»(not expired). Если deadline_timer::wait() функция принимает аргумент expired, то функция сразу же вернёт значение.
Наконец мы выводим всеми любимый и знакомый «Hello, World!» сообщение, чтобы показать, когда таймер истек «expired».
Установка 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 .
У меня этот файл находится в папке:
На время добавим этот путь в системную переменную Path на примере Windows 10:
Сборка для Qt под MinGW 32 бита
Вызываем командную строку. Это сделать можно разными способами. Например, жмем Win + R . Там вводим cmd и жмем Enter .
А можно через поиск:
Вводим команду для перехода в папку, где располагается распакованный Boost:
Вводим следующую команду. И ждем, когда всё выполнится:
Вы библиотеку Boost возможно будете собирать под разные версии компиляторов на одном компе. Поэтому в следующей команде укажите название папки, которая создаться в папке C:\boost , куда будут закинуты собранные файлы. Для MinGW 32bit папку назвал boost_mingw730_32 .
Вводим команду (не забудьте поменять название папки на вашу версию компилятора). И ждем, когда всё выполнится (а вот это будет не быстро):
И через долгое время (у меня ушло более 20 минут) библиотека соберется:
Кстати, эту команду можно ускорить, указав параметр -j8 , где число будет обозначать на скольких ядрах процессора будет происходить компилирование (правда у меня не сильно скорость увеличилась):
Итак, у нас у меня в папке 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 в консоли последовательно вызываем команды:
Не забудьте удалить путь к gcc.exe из переменной Path .
Сборка для Qt под Visual Studio 32 бит
И если сборка под MinGW прошла без проволочек, то со сборкой под Visual Studio я намучился.
У меня стоит сразу две версии Qt: под MinGW и под Visual Studio ( QWebEngine работает только под Visual Studio).
Тут вместо gcc.exe будет нужен файл cl.exe . У меня стоит Visual Studio 2019, и данный файл находится в папке:
Добавляем этот путь временно в системную переменную Path .
Также нам потребуется знание версии компилятора Visual Studio. Она не совпадает с названием установленной Visual Studio! Получить это значение можно из Visual Studio Installer:
Через поиск msvc находим установленный компилятор:
Нам потребуется как значение v142 . Последовательно в cmd вызываем команды:
Обратите внимание, что в командах используется значение v142 дважды в vc142 и msvc-14.2 . И не забываем поменять название папки для собранной библиотеки Boost:
Сборка для Qt под Visual Studio 64 бита
Для MinGW повторяем всё тоже самое, но указываем другой путь к компилятору и указываем другую папку для сборки (например, boost_vs2019_64 ), а также указываем, что собираем именно под x64 ( —address-model=64 ). У меня компилятор под x64 располагается тут:
После указания пути к компилятору в переменной в Path в консоли последовательно вызываем команды:
Подготовка Qt проекта
Создадим простой проект с виджетами с кнопкой PushButton и полем для вывода текста TextEdit . Для тех, кто не знает — скриншоты по под спойлером:
Подготовка для работы с MinGW 32 бита
Идем в файл проекта .pro :
Там подключите Boost библиотеку (не забудьте поменять пути на свои). В коде ниже есть раздел как для MinGW, так и под Visual Studio, причем под две битности x86 и x64:
Обратите внимание на то, в какую сторону повернуты слэши.
Пути к папкам поменяйте на свои:
В дальнейшем вам нужно будет добавлять тут еще библиотеки, которые вы будете использовать. Подключаете их через LIBS .
Если вы не подключите их, то будете видеть подобные ошибки (по ошибкам и определяете, какие файлы нужно подключить):
Для примеров ниже мне нужно было добавить библиотеки, и полный кусок добавляемого кода в *.pro файл выглядит так:
Обратите внимание, что перед путями и названием библиотеки появляется -L или -l :
Если вам нужно подключить несколько библиотек, то добавляете их подобным образом:
Обратите внимание на то, что для разных компиляторов одна и та же библиотека, например, libboost_date_time хранится в разных файлах, например с названием (без расширения) libboost_date_time-mgw7-mt-x32-1_73 и libboost_date_time-vc142-mt-x32-1_73 .
Если после внесения изменений и сохранения файла у вас кнопка запуска проекта горит зеленым, то всё прошло хорошо. Если серым, то где-то напортачили:
Перейдем в файл mainwindow.cpp :
Проверка № 1
Выведем седьмое простое число через функцию prime() . Функция является одной из специальных математических функций.
Подключаем заголовочный файл и соответствующее пространство имен:
Теперь в коде клика кнопки можем прописать:
Если возникнет такая ошибка, то повторно запустите процесс компиляции программы:
Проверка № 2
Проверим сколько дней прошло с 1 января.
Подключаем заголовочный файл и соответствующее пространство имен:
Теперь в коде клика кнопки можем прописать:
Исходники проекта прикреплены к статье.
P.S. Жесть, а не установка. Не нравится мне эта библиотека.<ul><li>Boost.png by Zoltan Juhasz / (2020-05-07)</li></ul>
Статья обновлена 2020-05-12
- C++
- Qt
- blog
- it
- programming
Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.
Сказ о том, как установить библиотеку Boost для Qt под MinGW и Qt под Visual Studio.