インストール - Boost
概要
Boostは、ピアレビューされた移植可能なC++ソースライブラリを無償で提供している。
C++標準ライブラリと親和性のあるライブラリを重視しており、広く有用かつ幅広いソフトウェアで使用できることを意図している。
Boostのライセンスは、全てのユーザが最小限の制限でBoostライブラリを使用することを推奨している。
Boostのインストール
CentOS / SUSE
Boostをビルドするため、依存関係のライブラリをインストールする。
sudo zypper install libicu-devel xz-devel libbz2-devel libzstd-devel python-devel
Boostの公式Webサイトにアクセスして、Boostをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf boost_<バージョン>.tar.gz cd boost_<バージョン>
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
オプション- ビルドに使用するツールセットを指定する。
Windows
Boostの公式Webサイトにアクセスして、Boostをダウンロードする。
過去のBoostをダウンロードする場合、https://www.boost.org/users/history/ にアクセスする。
ダウンロードしたファイルを解凍する。
解凍したディレクトリに移動して、コマンドプロンプトまたはPowerShellを管理者権限で実行する。
b2.exeファイルを生成するため、バッチファイルを起動する。
bootstrap.bat
Boostライブラリを生成する。(32ビットおよび64ビットの両方を生成してもよい)
Boostライブラリの生成に使用できるオプションを、以下に示す。
toolset
オプション- Visual Studio 2005 :
msvc-8.0
- Visual Studio 2008 :
msvc-9.0
- Visual Studio 2010 :
msvc-10.0
- Visual Studio 2012 :
msvc-11.0
- Visual Studio 2013 :
msvc-12.0
- Visual Studio 2015 :
msvc-14.0
- Visual Studio 2017 :
msvc-14.1
- Visual Studio 2019 :
msvc-14.2
- Visual Studio 2022 :
msvc-14.3
- Visual Studio 2005 :
address-model
オプション- 32ビット向けライブラリを生成する場合 :
32
- 64ビット向けライブラリを生成する場合 :
64
- 32ビット向けライブラリを生成する場合 :
# 32ビット向けライブラリを生成する場合 b2.exe toolset=msvc-xx.x link=static runtime-link=static,shared --build-dir=build/x86 address-model=32 -j <CPUのコア数> install --includedir=<Boostのインストールディレクトリ>\include --libdir=<Boostのインストールディレクトリ>\stage\lib\x86 # 64ビット向けライブラリを生成する場合 b2.exe toolset=msvc-xx.x link=static runtime-link=static,shared --build-dir=build/x64 address-model=64 -j <CPUのコア数> install --includedir=<Boostのインストールディレクトリ>\include --libdir=<Boostのインストールディレクトリ>\stage\lib\x64
次に、Visual Studioを起動して、任意のC++のプロジェクトを作成する。
これは、各プロジェクトごとに設定する必要があることに注意する。
[プロジェクト]メインメニュー - [プロパティ]を選択する。
[プロジェクトページ]画面が開くので、画面左にある[C/C++] - [全般] - 画面右にある[追加のインクルードディレクトリ]に、以下の設定を追記する。
<Boostのインストールディレクトリ>\include\boost-<バージョン>
[プロジェクトページ]画面の画面左にある[リンカー] - [全般] - 画面右にある[追加のライブラリディレクトリ]に、以下の設定を追記する。
# 32ビット向けライブラリの場合 <Boostのインストールディレクトリ>\stage\lib\x86 # 64ビット向けライブラリの場合 <Boostのインストールディレクトリ>\stage\lib\x64
Boostライブラリが使用できるかどうかを確認するため、以下に示すサンプルコードをビルドおよび実行する。
#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;
}
# 出力例 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>