1月 222012
 

64ビット環境で32ビット版boostバイナリをインストールする | Inhale n’ Exhale64ビット版Fedora14にboost-1.48.0の32ビット版バイナリをインストールしようとしたら、結構手こずってしまったので忘れないようにメモ。RPMがあれば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

 返信する

以下のHTML タグと属性が利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください