インストール - Boost

提供: MochiuWiki : SUSE, EC, PCB

概要

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の設計者を対象としている。


  • --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
  • architecture
    x86 または arm を指定する。
    ARM64向けビルドを行う場合は arm を指定する。
  • link
    static (静的リンクライブラリ) / shared (DLL) / static,shared (両方) のいずれかを指定する。
  • runtime-link
    static を指定すると /MT または /MTd (静的ランタイム) でビルドされる。
    shared を指定すると /MD または /MDd (動的ランタイム) でビルドされる。
  • variant
    debug / release / debug,release のいずれかを指定する。
  • threading
    single または multi を指定する。
  • --build-dir
    ビルド時の中間ファイルの出力先ディレクトリを指定する。
  • --stagedir
    ステージング先ディレクトリを指定する。
  • --prefix
    b2 install 使用時のインストール先ディレクトリを指定する。
  • --with-libraries / --without-libraries
    ビルドするライブラリを個別に選択または除外する。
  • --show-libraries
    ビルド対象となる利用可能なライブラリの一覧を表示する。
  • --layout
    versioned (Windowsデフォルト) / tagged / system のいずれかを指定する。
    指定するレイアウトによって、ライブラリ名の命名規則とインクルードディレクトリのパスが変わる。
  • -j<コア数>
    並列ビルドに使用するCPUコア数を指定する。


Visual Studio toolset 対応表

toolset オプションに指定するツールセット名と、対応するVisual Studioのバージョンを以下に示す。

Visual Studio toolset 対応表
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 となる。
  • 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>