Этот гайд посвящен установке библиотеки под названием Boost и тому, как правильно ее подключить к нашей программе.
Переходим на этот сайт и в строке “windows” выбираем подстроку “boost_1_82_0.7z” (или “boost_1_82_0.zip”). Начинается загрузка.
После того, как архив скачался, распаковываем его в любом удобном месте, я выберу следующий путь: C:\Program Files\boost\boost_1_82_0
Заходим в терминал Git Bash и пишем следующие команды:
cd C:/Program\ Files/boost/boost_1_82_0 # переходим
code . # открываем в VS Code содержимое текущей директории
У вас откроется VS Code со всем содержимым этой библиотеки.
Создаем в этой директории файл, например, example.cpp
и вставляем в него следующий код (ОБЯЗАТЕЛЬНО потом нажимаем ctrl + S, чтобы сохранить файл):
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(
in(std::cin), in(), std::cout << (_1 * 3) << " \n" );
}
Заходим обратно в терминал и начинаем сборку нашего файла следующей командой:
g++ example.cpp -o example -I путь_до_папки_boost_1_82_0 # компилируем .cpp файл в исполняемый с именем "example" и указав флагом -I путь до инклюдов
./example.exe # запускаем исполняемый файл
После этого вы сможете вводить в терминал числа и получать на выходе то же число, но умноженное на 3. Завершить программу можно закрыв терминал или отправив вместо числа любую букву.
Примечание! Файл с программой необязательно создавать в папке boost_1_82_0. Это можно сделать в любом другом месте. Отличие лишь в том, какой путь указывать флагом -I
. Так, если наша программа лежит в папке boost_1_82_0, то абсолютный путь до этой папки можно было бы заменить относительным:
g++ example.cpp -o example -I . # точка означает текущую директорию
./example.exe
Теперь немного теории. Дело в том, что большинство модулей в библиотеке Boost написано с использованием только заголовочных файлов (формата .h
и .hpp
). Это значительно упрощает сборку проекта, так как их достаточно просто положить в папку с вашим проектом (или указать в настройках дополнения C/C++ в VS Code путь до этих заголовочных файлов) и подключить непосредственно во время работы, указав путь флагом -I
во время компиляции. Однако есть список модулей, которые используют так называемые динамические библиотеки при сборке (формат .dll
). Вот их список:
Они собираются отдельно и “линкуются” непосредственно во время сборки. Наша задача состоит в том, чтобы собрать все эти библиотеки отдельным скриптом, который уже лежит в папке boost_1_82_0, а затем “слинковать” их с исполняемым файлом.
Перед использованием утилиты bootstrap, нам необходимо обновиться. Дело в том, что самый удобный установщик gcc (mingw-get) канул в 2016 году и с тех пор не обновлялся, а последние версии Boost уже ушли далеко за стандарты 2016 года. Как вариант — использовать компилятор MSVC, но мало у кого он установлен (а жаль).
Поэтому вступаем в новый круг ада под названием “Программирование на C++ под Windows” или “Почему я ненавижу MinGW”. Переходим по этой ссылке и качаем архивчик. Заходим в архив и первые 5 папок (bin, include, lib, libexec, share) переносим с заменой туда, где у вас установлен MinGW (у меня это C:/MinGW
). Затем открываем в этом архиве папку mingw64/x86_64-w64-mingw32 и все папки, которые находятся там, переносим с заменой в ту же папку MinGW. Подтверждаем замену.
П Е Р Е З А Г Р У Ж А Е М С Я!
Приступим к финальной части. Нам надо перейти в папку boost_1_82_0 и оттуда запустить скрипт:
cd путь_до_папки_boost_1_82_0 # переходим в папку boost_1_82_0
./bootstrap.bat gcc # запускаем скрипт для создания исполняемого файла сборки
# ... пойдет недолгий процесс ...
./b2.exe toolset=gcc --with-thread # выбираем gcc'шный тулсет и задаем префикс на установку только либы thread (иначе мы никогда не дождемся сборки)
# ... пойдет недолгий процесс ...
# .............................
# дождитесь окончания сборки
Теперь в файле example.cpp
из предыдущего пункта пишем следующий код:
#include <boost/thread.hpp>
#include <iostream>
void wait(int seconds)
{
boost::this_thread::sleep(boost::posix_time::seconds(seconds));
}
void thread()
{
for(int i = 0; i < 5; ++i)
{
wait(1);
std::cout << i << std::endl;
}
}
int main()
{
boost::thread t(thread);
t.join();
}
Теперь мы можем скомпилировать все это дело
g++ example.cpp -o example -I . stage/lib/libboost_thread-mgw13-mt-d-x64-1_82.a # ненавижу gcc
./example.exe # поехали!
Результатом станет вывод чисел от 0 до 4 с задержкой в 1 секунду.
Готово! Библиотека установлена. Чтобы использовать другие библиотеки, надо собрать новый исполняемый файл сборки и явно указать нужный модуль. Поверьте, так быстрее, чем ждать сборки всех модулей сразу.
cd путь_до_папки_boost_1_82_0
./b2.exe toolset=gcc --with-название-модуля
Модули затем находим по пути путь_до_папки_boost_1_82_0/stage/lib
и используем их названия.
Спасибо за внимание. По любым вопросам обращайтесь в tg: comrademashkov.
Building 1