yum
でインストールしてしまいたいが、あいにくFedora14のRPMリポジトリはboost-1.44.0以降、更新される気配がなくなってしまったので(本エントリ執筆時点でFedora16はboost-1.47.0まで公開されていた)、自前でビルドせざるを得なくなった。開発マシンが32ビット環境から64ビット環境に変わっても、32ビット版のモジュールをコンパイルすることはまだあるので、64ビット環境でも32ビット版を一緒にコンパイルできた方がずっと楽だ。
まず64ビット版のboostをビルドするには、Boost Getting Started on Unix Variantsの手順に従えばなんなくビルドできるのだが、バージョンアップを考慮してインストール先のディレクトリをデフォルトから変更してビルドする。
$ tar zxf boost_1_48_0.tar.gz $ cd boost_1_48_0 $ ./bootstrap.sh --libdir=/usr/local/lib64/boost_1_48_0 \ --includedir=/usr/local/include/boost_1_48_0 $ ./b2 $ sudo ./b2 install
boostを使ったC++ソースをコンパイルする場合は、-I
オプション、-L
オプションを使ってサーチパスを追加すればよい。
$ g++ -I/usr/local/include/boost_1_48_0 \ -L/usr/local/lib64/boost_1_48_0 -o test main.cpp
では、64ビット環境で32ビット版のboostをビルドするにはどうすればよいか?Boost.Buildのドキュメントを見ると、bjam
の引数でaddress-model
オプションを追加できるようなので、32ビット版としてコンパイルするようにオプションを指定する。
$ ./bootstrap.sh --libdir=/usr/local/lib/boost_1_48_0 \ --includedir=/usr/local/include/boost_1_48_0.i686 $ ./bjam address-model=32 $ sudo ./bjam address-model=32 install $ sudo rm -rf /usr/local/include/boost_1_48_0.i686
共有ライブラリのインストール先ディレクトリは64ビット版(/usr/local/lib64
)と区別するように、/usr/local/lib
配下に32ビット版を配置する。
ヘッダファイルは/usr/local/include/boost_1_48_0.i686
にインストールしているが、32ビット版も64ビット版も同じなのでインストール後に削除。
32ビット版のプログラムをコンパイルする場合も同じようにサーチパスを追加してやればよいと。
$ g++ -m32 -I/usr/local/include/boost_1_48_0 \ -L/usr/local/lib/boost_1_48_0 -o test main.cpp