インストール - Boost
概要
Boostは、ピアレビューされた移植可能なC++ソースライブラリを無償で提供している。
C++標準ライブラリと親和性のあるライブラリを重視しており、広く有用かつ幅広いソフトウェアで使用できることを意図している。
Boostのライセンスは、全てのユーザが最小限の制限でBoostライブラリを使用することを推奨している。
BoostにおけるOpen MPI
OpenMPI (Open Message Passing Interface) は、Boostライブラリ自体の一部ではないが、Boost.MPIというコンポーネントと密接に関連している。
Boost.MPIは、C++でMPI (Message Passing Interface) プログラミングを行うためのインターフェースを提供するBoostライブラリである。
MPIは並列計算や分散メモリシステムでのプログラミングに広く使用されているAPI規格である。
Open MPIは、このMPI規格の実装の1つである。
Boost.MPIは、Open MPIを含む様々なMPI実装と連携して動作するように設計されている。
Boost.MPIの主なメリットは、C++の抽象化を提供して、MPIプログラミングをより簡単かつ型安全にすることである。
また、Boostの他のライブラリ (例: Boost.Serialization) との統合も図られている。
Boost.MPIを使用する場合は、Open MPI等のMPI実装がシステムにインストールされている必要がある。
Boost.MPIは、これらの実装の上に構築され、より高レベルのC++インターフェースを提供する。
Boost.MPIをビルドする場合は、システムにOpen MPI等のMPI実装がインストールされていることが前提となる。
Boostのビルド時には、MPI実装のヘッダーファイルとライブラリへのパスを正しく指定する必要がある。
Boost.MPIは、基盤となるMPI実装 (Open MPI等) の性能特性を維持しつつ、C++の利点を活かしたインターフェースを提供する。
また、異なるMPI実装間での互換性も考慮されている。
Open MPIはMPIの実装の1つであり、Boost.MPIはこのようなMPI実装を利用してC++で並列プログラミングを行うためのインターフェースを提供するBoostコンポーネントである。
Open MPIはBoost自体の一部ではないが、Boost.MPIを使用する場合の基盤となる重要なソフトウェアの1つとして位置付けられている。
Boostのインストール
RHEL / SUSE
Boostをビルドするため、依存関係のライブラリをインストールする。
# SUSE
sudo zypper install libicu-devel xz-devel libbz2-devel libzstd-devel python-devel python3-devel \
openmpi-devel # オプション
Boostの公式Webサイトにアクセスして、Boostをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf boost_<バージョン>.tar.gz cd boost_<バージョン>
ビルド時において、コンパイラを指定する場合は、環境変数 CC および CXX を指定する。
# 例 :
export CC=gcc-14; \
export CXX=g++-14
Boostをビルドおよびインストールする。
# 全てインストールする場合
./bootstrap.sh --prefix=<Boostのインストールディレクトリ>
./b2 \
--build-dir=./build \
--layout=system \
--variant=release \
install
# ヘッダーファイルのみインストールする場合
./bootstrap.sh --prefix=<Boostのインストールディレクトリ>
./b2 headers \
--build-dir=./build \
--layout=versioned \
install
ビルド時のオプションを、以下に示す。
--layoutオプション- 指定しない場合、Linuxでは
system、Windowsではversionedとなる。
- versioned
- boostバイナリの名前には、Boostのバージョン番号、コンパイラ名とバージョン、エンコードされたビルドプロパティが含まれている。
- Boostヘッダは、Boostのヘッダディレクトリ内のサブディレクトリにインストールされて、その名前にBoostのバージョン番号が付加される。
- tagged
- boostバイナリの名前には、variantやthreading等のエンコードされたビルドプロパティが含まれるが、コンパイラ名とバージョン、Boostのバージョンは含まれない。
- taggedを指定する場合、同じコンパイラを使用して複数のBoostのバリアントをビルドする場合に便利である。
- system
- Boostバイナリの名前に、Boostのバージョン番号、コンパイラ名とバージョン番号は含まれない。
- Boostのヘッダは、Boostのヘッダディレクトリに直接インストールされる。
- systemを指定する場合、配布パッケージを構築するBoostの設計者を対象としている。
- 指定しない場合、Linuxでは
--build-typeオプション- 指定した事前定義されたライブラリのバリエーションセットをビルドする。
- どのバリエーションがビルドされるかは、各ライブラリが何をサポートしているかに依存することに注意する。
- minimal (デフォルト)
- 最小限のvariantのセットをビルドする。
- Windowsの場合、デバッグモードとリリースモードの静的マルチスレッドライブラリであり、共有ランタイムを使用する。
- Linuxの場合、リリースモードの静的および共有マルチスレッドライブラリである。
- complete
- 可能な全てのバリエーションをビルドする。
--toolsetオプション- ビルドに使用するツールセットを指定する。
必要ならば、~/.profileファイル等に環境変数を追記する。
vi ~/.profile
# ~/.profileファイル
export LD_LIBRARY_PATH="/<Boostのインストールディレクトリ>/lib:$LD_LIBRARY_PATH"
export BOOST_ROOT="<Boostのインストールディレクトリ>"
export BOOST_LIBRARYDIR="/<Boostのインストールディレクトリ>/lib"
export CPPFLAGS="-L$/<Boostのインストールディレクトリ>/include $CPPFLAGS"
Windows
ダウンロード
Boostをダウンロードする方法として、以下の2つがある。
- ソースからビルドする方法 (推奨)
- Boostの公式Webサイトからソースアーカイブをダウンロードする。
- 過去バージョンのソースアーカイブは、Boostの旧バージョンアーカイブからダウンロードできる。
- プリビルド済みバイナリを使用する方法
- SourceForge (boost-binaries)から、各Visual Studioバージョン向けの .exe インストーラをダウンロードできる。
- ただし、MSVC 14.4x (Visual Studio 2022 v17.10以降) 向けのバイナリは配布が限定的な場合があるため、該当バージョンを使用する場合はソースからビルドすることを推奨する。
ソースからビルドする手順
ダウンロードしたファイルを解凍する。
解凍したディレクトリに移動して、コマンドプロンプトまたはPowerShellを管理者権限で実行する。
b2.exe ファイルを生成するため、バッチファイルを実行する。
bootstrap.bat
b2.exe を使用してBoostライブラリをビルドする。(32ビット、64ビット、ARM64 の各構成をビルドしてもよい)
b2.exe ビルドオプション
Boostライブラリの生成に使用できる主なオプションを、以下に示す。
toolset- ビルドに使用するコンパイラ (ツールセット) を指定する。
- 詳細はVisual Studio toolset対応表を参照すること。
address-model- 32ビット向けライブラリを生成する場合 :
32 - 64ビット向けライブラリを生成する場合 :
64
- 32ビット向けライブラリを生成する場合 :
architecturex86またはarmを指定する。- ARM64向けビルドを行う場合は
armを指定する。
linkstatic(静的リンクライブラリ) /shared(DLL) /static,shared(両方) のいずれかを指定する。
runtime-linkstaticを指定すると /MT または /MTd (静的ランタイム) でビルドされる。sharedを指定すると /MD または /MDd (動的ランタイム) でビルドされる。
variantdebug/release/debug,releaseのいずれかを指定する。
threadingsingleまたはmultiを指定する。
--build-dir- ビルド時の中間ファイルの出力先ディレクトリを指定する。
--stagedir- ステージング先ディレクトリを指定する。
--prefixb2 install使用時のインストール先ディレクトリを指定する。
--with-libraries/--without-libraries- ビルドするライブラリを個別に選択または除外する。
--show-libraries- ビルド対象となる利用可能なライブラリの一覧を表示する。
--layoutversioned(Windowsデフォルト) /tagged/systemのいずれかを指定する。- 指定するレイアウトによって、ライブラリ名の命名規則とインクルードディレクトリのパスが変わる。
-j<コア数>- 並列ビルドに使用するCPUコア数を指定する。
Visual Studio toolset 対応表
toolset オプションに指定するツールセット名と、対応するVisual Studioのバージョンを以下に示す。
| Visual Studio | MSVC Build Tools | b2 toolset |
|---|---|---|
| VS 2005 (8.0) | 8.0 | msvc-8.0
|
| VS 2008 (9.0) | 9.0 | msvc-9.0
|
| VS 2010 (10.0) | 10.0 | msvc-10.0
|
| VS 2012 (11.0) | 11.0 | msvc-11.0
|
| VS 2013 (12.0) | 12.0 | msvc-12.0
|
| VS 2015 (14.0) | 14.0 | msvc-14.0
|
| VS 2017 (15.x) | 14.1x | msvc-14.1
|
| VS 2019 (16.x) | 14.2x | msvc-14.2
|
| VS 2022 (17.0 - 17.9) | 14.30 - 14.39 | msvc-14.3
|
| VS 2022 (17.10 - 17.14) | 14.40 - 14.44 | msvc-14.4
|
| VS 2026 (18.0) | 14.50 | msvc-14.5
|
互換性に関する注意事項
- MSVC 14.4x (Visual Studio 2022 v17.10以降) は、Boost 1.85以前のBoost.Buildで認識されない問題がある。
- この問題が発生した場合は、Boost 1.86.0以降を使用すること。
- Visual Studio 2026 (msvc-14.5) を使用する場合は、Boost 1.91.0以降を推奨する。
- Boost 1.91.0は2026年4月22日にリリースされた最新バージョンである。
ビルドコマンド例
32ビット、64ビット、ARM64向けのビルドコマンド例を以下に示す。
# 32ビット向けライブラリを生成する場合
b2.exe toolset=msvc-14.3 address-model=32 architecture=x86 ^
link=static,shared runtime-link=static,shared ^
variant=debug,release threading=multi ^
--build-dir=build\x86 ^
--stagedir=stage\x86 ^
-j4
# 64ビット向けライブラリを生成する場合
b2.exe toolset=msvc-14.3 address-model=64 architecture=x86 ^
link=static,shared runtime-link=static,shared ^
variant=debug,release threading=multi ^
--build-dir=build\x64 ^
--stagedir=stage\x64 ^
-j4
# ARM64向けライブラリを生成する場合
b2.exe toolset=msvc-14.3 address-model=64 architecture=arm ^
link=static,shared runtime-link=static,shared ^
variant=debug,release threading=multi ^
--build-dir=build\arm64 ^
--stagedir=stage\arm64 ^
-j4
# Visual Studio 2026 (msvc-14.5) を使用する場合の例 (Boost 1.91.0以降)
b2.exe toolset=msvc-14.5 address-model=64 architecture=x86 ^
link=static,shared runtime-link=static,shared ^
variant=debug,release threading=multi ^
--build-dir=build\x64 ^
--stagedir=stage\x64 ^
-j4
インストール先を指定してビルドする場合は、--prefix オプションと install ターゲットを使用する。
b2.exe toolset=msvc-14.3 address-model=64 ^
link=static runtime-link=shared ^
variant=release threading=multi ^
--build-dir=build\x64 ^
--prefix=<Boostのインストールディレクトリ> ^
-j4 install
ライブラリ名の命名規約
--layout=versioned (Windowsのデフォルト) を使用する場合、ライブラリ名には以下のような識別子が付加される。
例: libboost_filesystem-vc143-mt-s-x64-1_91.lib
vc143- コンパイラ識別子。Visual Studio 2022 (msvc-14.3) の場合は
vc143、Visual Studio 2026 (msvc-14.5) の場合はvc145となる。
- コンパイラ識別子。Visual Studio 2022 (msvc-14.3) の場合は
mt- マルチスレッドでビルドされていることを示す。
s- 静的ランタイムリンク (/MT または /MTd) でビルドされていることを示す。
x64- 64ビットアーキテクチャ向けであることを示す。
1_91- Boostのバージョン番号 (例: 1.91.0) を示す。
Visual Studio プロジェクトの設定
Visual Studioを起動して、任意のC++のプロジェクトを作成する。
これは、各プロジェクトごとに設定する必要があることに注意する。
[プロジェクト]メインメニュー - [プロパティ]を選択する。
[プロジェクトページ]画面が開くので、画面左にある[C/C++] - [全般] - 画面右にある[追加のインクルードディレクトリ]に、以下の設定を追記する。
インクルードディレクトリのパスは、ビルド時に指定した --layout オプションによって異なる。
--layout=versioned(Windowsデフォルト) の場合- <Boostのインストールディレクトリ>\include\boost-<バージョン>
--layout=systemの場合- <Boostのインストールディレクトリ>\include
[プロジェクトページ]画面の画面左にある[リンカー] - [全般] - 画面右にある[追加のライブラリディレクトリ]に、以下の設定を追記する。
ライブラリディレクトリのパスは、ビルド時に指定した --stagedir または --prefix の設定に依存する。
# 32ビット向けライブラリの場合 <Boostのインストールディレクトリ>\stage\x86\lib # 64ビット向けライブラリの場合 <Boostのインストールディレクトリ>\stage\x64\lib # ARM64向けライブラリの場合 <Boostのインストールディレクトリ>\stage\arm64\lib
Boostライブラリの確認
Boostライブラリが使用できるかどうかを確認するため、以下に示すサンプルコードをビルドおよび実行する。
// boost.cpp
#include <iostream>
#include <vector>
#include <string>
#include <boost/version.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/foreach.hpp>
struct Boost_Test {
std::string name1;
std::string name2;
};
int main()
{
std::cout << "boostバージョン : " << BOOST_VERSION << "\n";
std::cout << "boostライブラリバージョン : " << BOOST_LIB_VERSION << "\n";
std::vector<Boost_Test> books;
books.reserve(2);
Boost_Test test;
test.name1 = "BoostTest1";
test.name2 = "100";
books.push_back(test);
test.name1 = "BoostTest2";
test.name2 = "200";
books.push_back(test);
using boost::property_tree::ptree;
ptree pt;
BOOST_FOREACH(const Boost_Test & data, books)
{
ptree& child = pt.add("list.data", "");
child.put("<xmlattr>.name1", data.name1);
child.put("<xmlattr>.name2", data.name2);
}
using namespace boost::property_tree::xml_parser;
const int indent = 2;
write_xml("test.xml", pt, std::locale(), xml_writer_make_settings<std::string>(' ', indent));
return 0;
}
ソースコードをコンパイルする。
g++ -I/<Boostのインクルードディレクトリ>/include boost.cpp -o boost
コンパイルしたファイルを実行する。
./boost # 出力例 boostバージョン:107600 boostライブラリバージョン:1_76
<!-- test.xmlファイル -->
<?xml version="1.0" encoding="utf-8"?>
<list>
<data name1="BoostTest1" name2="100"/>
<data name1="BoostTest2" name2="200"/>
</list>