PVOID - Сборка boost. Шпаргалка

Сборка boost. Шпаргалка

 На странице очень кратко описан процесс сборки boost. Тем, кто знаком с процессом сбоки boost, статья может быть полезна в качестве шпаргалки или источника для копипасты. Начинающие могут рассматривать эту страницу как дополнительный материал к другим источникам. Не стоит рассматривать эту статью как основной источник информации по этой теме.

 Сборка boost под Windows и Linux

 Процесс сборки библиотеки boost для ОС Windows и Linux существенно не отличается. Далее кратко описаны необходимые шаги:

  • Скачать дистрибутив с официального сайта.

  • Распаковать архив

  • Зайти в распакованный архив

  • Выполнить bootstrap.bat (Windows) или bootstrap.sh (Linux).

  • Выполнить b2 с необходимыми параметрами

Например, процесс скачивания и сборки на Linux может выглядеть так:

# Ссылка на архив, актуальные ссылки искать на https://www.boost.org/users/download
url=https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz
build_dir=boost-build

# Скачиваем архив
wget $url

# Распаковываем архив
tar -xzf boost_1_86_0.tar.gz
pushd boost_1_86_0

# Запускаем bootstrap
./bootstrap.sh
prefix=../$build_dir

# Создаём директорию для сборки
mkdir -p $prefix

# Запускаем сборку
./b2 -j 16 --prefix=$prefix install > ../build.log
popd

 Скачать скрипт для сборки boost для Linux / WSL : build-boost.sh

Аналогичный сценарий для Windows в PowerShell:

# Ссылка на архив, актуальные ссылки искать на https://www.boost.org/users/download
$url = "https://archives.boost.io/release/1.86.0/source/boost_1_86_0.zip"
$build_dir = "boost-build"

# Скачиваем архив
Invoke-WebRequest -Uri $url -OutFile boost_1_86_0.zip

# Распаковываем архив
Expand-Archive boost_1_86_0.zip -DestinationPath .
pushd boost_1_86_0

# Запускаем bootstrap
.\bootstrap.bat
$prefix = "..\$build_dir"

# Создаём директорию для сборки
mkdir -ErrorAction SilentlyContinue $prefix

# Запускаем сборку
.\b2 -j 16 --prefix=$prefix install > ..\build.log
popd

 Скачать скрипт для сборки boost для PowerShell : build-boost.ps1

Сборка может занимать ~ от 5 до 40 минут в зависимости от параметров сборки и конфигурации машины, не включая времени на скачивание и распаковку. Общий размер собранных библиотек может достигать 1.5 гигабайт при настройках по умолчанию.

Чтобы настроить сборку с нужными параметрами необходимо передать эти параметры при вызове  b2. Вот некоторые полезные параметры:

  1.  --prefix=directory - директория, куда будут скопированы заголовочные файлы и библиотеки после сборки. Настоятельно рекомендуется указывать этот параметр

  2.  -j N - выполнять сборку в N потоков - может сильно ускорить компиляцию

  3.  toolset=compiler - использовать для сборки компилятор compiler (должен быть установлен). Например toolset=vc142 означает сборку компилятором Microsoft Visual C++ 2019. Также могут быть указаны такие компиляторы как gccmingw, clang и другие. Полный список компиляторов можно найти на странице B2 User Manual.

  4. cxxflags=flags - дополнительные опции, передаваемые компилятору, например cxxflags="-std=c++17".

  5. link=type - указывает собирать статические или динамические библиотеки, возможные значения: link=static, link=shared.

  6. address-model=arch - явно указывает генерировать 32- или 64-разрядный код. Возможные значения: address-model=32address-model=64.

Полный набор флагов и свойств можно найти на странице B2 User Manual.

 

Примеры команд для сборки boost на mingw:

b2 -j 4 toolset=mingw link=shared --prefix=C:/boost install

b2 toolset=gcc threading=multi link=static runtime-link=shared --prefix=C:/boost install

 

Примеры команд для сборки boost на Visual C++:

b2 -j 8 toolset=msvc variant=debug link=shared threading=multi runtime-link=shared --prefix=C:/boost install

b2 toolset=vc141 link=static threading=multi runtime-link=shared address-model=32

 

Пример команды для сборки boost с помощью gcc на Linux:

./b2 -j 16 toolset=gcc link=shared runtime-link=shared address-model=64 --cxxflags="-fPIC -std=c++17" --prefix=/home/user/boost install

 

Сборка кросс-компилятором под ARM

  •  Скачать и распаковать.

  •  Запустить bootstrab.sh .

  •  Открыть project-config.jam, заменить «using gcc» на «using gcc : arm : arm-linux-gnueabihf-g++».

  •  Добавить путь к тулчейну в переменную PATH (если не сделано).

  •  В командной строке b2 указать необходимые параметры: toolset=gcc-arm cxxflags="-std=c++11".

  •  Сборка.

 Итоговая строка b2 может выглядеть так:

./b2 toolset=gcc-arm cxxflags="-std=c++11" --prefix=/home/user/boost-arm/ install

 

 Примечание: флаг cxxflags="-std=c++11″ в некоторых случаях может помочь при компоновке boost::log.

Замечания о статической компоновке

На дистрибутивах с архитектурой x86_64 статические библиотеки, устанавливаемые через пакетный менеджер из репозиториев, могут быть собраны без флага -fPIC. Это не позволяет осуществлять статическую компоновку библиотеки к динамической библиотеке, что иногда бывает нужно. Для решения проблемы нужно собрать библиотеки с указанием флага -fPIC. Кроме того, желательно явно указать стандарт языка при сборке библиотек. Команда сборки библиотек Boost может выглядеть так:

./b2 link=static threading=multi cxxflags="-fPIC -std=c++11" install --prefix=/path-to-install

Полное описание всех возможностей и свойств b2 можно найти на странице B2 User Manual.