📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の14版が非表示) | |||
| 4行目: | 4行目: | ||
<br> | <br> | ||
Boostのライセンスは、全てのユーザが最小限の制限でBoostライブラリを使用することを推奨している。<br> | Boostのライセンスは、全てのユーザが最小限の制限でBoostライブラリを使用することを推奨している。<br> | ||
<br><br> | |||
== BoostにおけるOpen MPI == | |||
OpenMPI (Open Message Passing Interface) は、Boostライブラリ自体の一部ではないが、Boost.MPIというコンポーネントと密接に関連している。<br> | |||
<br> | |||
Boost.MPIは、C++でMPI (Message Passing Interface) プログラミングを行うためのインターフェースを提供するBoostライブラリである。<br> | |||
MPIは並列計算や分散メモリシステムでのプログラミングに広く使用されているAPI規格である。<br> | |||
<br> | |||
Open MPIは、このMPI規格の実装の1つである。<br> | |||
Boost.MPIは、Open MPIを含む様々なMPI実装と連携して動作するように設計されている。<br> | |||
Boost.MPIの主なメリットは、C++の抽象化を提供して、MPIプログラミングをより簡単かつ型安全にすることである。<br> | |||
<br> | |||
また、Boostの他のライブラリ (例: Boost.Serialization) との統合も図られている。<br> | |||
<br> | |||
Boost.MPIを使用する場合は、Open MPI等のMPI実装がシステムにインストールされている必要がある。<br> | |||
Boost.MPIは、これらの実装の上に構築され、より高レベルのC++インターフェースを提供する。<br> | |||
<br> | |||
Boost.MPIをビルドする場合は、システムにOpen MPI等のMPI実装がインストールされていることが前提となる。<br> | |||
Boostのビルド時には、MPI実装のヘッダーファイルとライブラリへのパスを正しく指定する必要がある。<br> | |||
<br> | |||
Boost.MPIは、基盤となるMPI実装 (Open MPI等) の性能特性を維持しつつ、C++の利点を活かしたインターフェースを提供する。<br> | |||
また、異なるMPI実装間での互換性も考慮されている。<br> | |||
<br> | |||
Open MPIはMPIの実装の1つであり、Boost.MPIはこのようなMPI実装を利用してC++で並列プログラミングを行うためのインターフェースを提供するBoostコンポーネントである。<br> | |||
Open MPIはBoost自体の一部ではないが、Boost.MPIを使用する場合の基盤となる重要なソフトウェアの1つとして位置付けられている。<br> | |||
<br><br> | <br><br> | ||
== Boostのインストール == | == Boostのインストール == | ||
==== RHEL / SUSE ==== | |||
Boostをビルドするため、依存関係のライブラリをインストールする。<br> | Boostをビルドするため、依存関係のライブラリをインストールする。<br> | ||
sudo zypper install libicu-devel libbz2-devel libzstd-devel | # SUSE | ||
sudo zypper install libicu-devel xz-devel libbz2-devel libzstd-devel python-devel python3-devel \ | |||
openmpi-devel # オプション | |||
<br> | <br> | ||
[https://www.boost.org/users/download/ Boostの公式Webサイト]にアクセスして、Boostをダウンロードする。<br> | [https://www.boost.org/users/download/ Boostの公式Webサイト]にアクセスして、Boostをダウンロードする。<br> | ||
| 14行目: | 42行目: | ||
tar xf boost_<バージョン>.tar.gz | tar xf boost_<バージョン>.tar.gz | ||
cd boost_<バージョン> | cd boost_<バージョン> | ||
<br> | |||
<u>ビルド時において、コンパイラを指定する場合は、環境変数 <code>CC</code> および <code>CXX</code> を指定する。</u><br> | |||
<syntaxhighlight lang="sh"> | |||
# 例 : | |||
export CC=gcc-14; \ | |||
export CXX=g++-14 | |||
</syntaxhighlight> | |||
<br> | <br> | ||
Boostをビルドおよびインストールする。<br> | Boostをビルドおよびインストールする。<br> | ||
# 全てインストールする場合 | |||
./bootstrap.sh --prefix=<Boostのインストールディレクトリ> | ./bootstrap.sh --prefix=<Boostのインストールディレクトリ> | ||
./b2 | ./b2 \ | ||
--layout=versioned \ | --build-dir=./build \ | ||
--layout=system \ | |||
--variant=release \ | |||
install | |||
# ヘッダーファイルのみインストールする場合 | |||
./bootstrap.sh --prefix=<Boostのインストールディレクトリ> | |||
./b2 headers \ | |||
--build-dir=./build \ | |||
--layout=versioned \ | |||
install | install | ||
<br> | <br> | ||
ビルド時のオプションを、以下に示す。<br> | ビルド時のオプションを、以下に示す。<br> | ||
* <code>--layout</code>オプション | * <code>--layout</code>オプション | ||
*: 指定しない場合、Linuxでは<code>system</code>、Windowsでは<code>versioned</code>となる。 | |||
** versioned | ** versioned | ||
**: boostバイナリの名前には、Boostのバージョン番号、コンパイラ名とバージョン、エンコードされたビルドプロパティが含まれている。 | **: boostバイナリの名前には、Boostのバージョン番号、コンパイラ名とバージョン、エンコードされたビルドプロパティが含まれている。 | ||
| 53行目: | 99行目: | ||
* <code>--toolset</code>オプション | * <code>--toolset</code>オプション | ||
*: ビルドに使用するツールセットを指定する。 | *: ビルドに使用するツールセットを指定する。 | ||
<br> | |||
必要ならば、~/.profileファイル等に環境変数を追記する。<br> | |||
vi ~/.profile | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
# ~/.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" | |||
</syntaxhighlight> | |||
<br> | |||
==== Windows ==== | |||
[https://www.boost.org/users/download/ Boostの公式Webサイト]にアクセスして、Boostをダウンロードする。<br> | |||
過去のBoostをダウンロードする場合、https://www.boost.org/users/history/ にアクセスする。<br> | |||
<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
<br> | |||
解凍したディレクトリに移動して、コマンドプロンプトまたはPowerShellを管理者権限で実行する。<br> | |||
b2.exeファイルを生成するため、バッチファイルを起動する。<br> | |||
bootstrap.bat | |||
<br> | |||
Boostライブラリを生成する。(32ビットおよび64ビットの両方を生成してもよい)<br> | |||
Boostライブラリの生成に使用できるオプションを、以下に示す。<br> | |||
* <code>toolset</code>オプション | |||
*: Visual Studio 2005 : <code>msvc-8.0</code> | |||
*: Visual Studio 2008 : <code>msvc-9.0</code> | |||
*: Visual Studio 2010 : <code>msvc-10.0</code> | |||
*: Visual Studio 2012 : <code>msvc-11.0</code> | |||
*: Visual Studio 2013 : <code>msvc-12.0</code> | |||
*: Visual Studio 2015 : <code>msvc-14.0</code> | |||
*: Visual Studio 2017 : <code>msvc-14.1</code> | |||
*: Visual Studio 2019 : <code>msvc-14.2</code> | |||
*: Visual Studio 2022 : <code>msvc-14.3</code> | |||
*: <br> | |||
* <code>address-model</code>オプション | |||
*: 32ビット向けライブラリを生成する場合 : <code>32</code> | |||
*: 64ビット向けライブラリを生成する場合 : <code>64</code> | |||
# 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 | |||
<br> | |||
次に、Visual Studioを起動して、任意のC++のプロジェクトを作成する。<br> | |||
<u>これは、各プロジェクトごとに設定する必要があることに注意する。</u><br> | |||
<br> | |||
[プロジェクト]メインメニュー - [プロパティ]を選択する。<br> | |||
[プロジェクトページ]画面が開くので、画面左にある[C/C++] - [全般] - 画面右にある[追加のインクルードディレクトリ]に、以下の設定を追記する。<br> | |||
<Boostのインストールディレクトリ>\include\boost-<バージョン> | |||
<br> | |||
[プロジェクトページ]画面の画面左にある[リンカー] - [全般] - 画面右にある[追加のライブラリディレクトリ]に、以下の設定を追記する。<br> | |||
# 32ビット向けライブラリの場合 | |||
<Boostのインストールディレクトリ>\stage\lib\x86 | |||
# 64ビット向けライブラリの場合 | |||
<Boostのインストールディレクトリ>\stage\lib\x64 | |||
<br><br> | |||
== Boostライブラリの確認 == | |||
Boostライブラリが使用できるかどうかを確認するため、以下に示すサンプルコードをビルドおよび実行する。<br> | |||
<syntaxhighlight lang="c++"> | |||
// 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; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
ソースコードをコンパイルする。<br> | |||
g++ -I/<Boostのインクルードディレクトリ>/include boost.cpp -o boost | |||
<br> | |||
コンパイルしたファイルを実行する。<br> | |||
./boost | |||
# 出力例 | |||
boostバージョン:107600 | |||
boostライブラリバージョン:1_76 | |||
<br> | |||
<syntaxhighlight lang="xml"> | |||
# test.xmlファイルの内容 | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<list> | |||
<data name1="BoostTest1" name2="100"/> | |||
<data name1="BoostTest2" name2="200"/> | |||
</list> | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:C++]] | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Windows10]][[カテゴリ:C++]] | ||