インストール - Boost

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2022年10月21日 (金) 00:38時点におけるWiki (トーク | 投稿記録)による版 (→‎CentOS / SUSE)
ナビゲーションに移動 検索に移動

概要

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


  • --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

  • address-modelオプション
    32ビット向けライブラリを生成する場合 : 32
    64ビット向けライブラリを生成する場合 : 64
# 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>