Boostのライブラリをビルド

Boost1.45のライブラリのビルドとリンクが結構大変で戸惑いました…
話は全てWindows 7 64bit上での事です。

■bjamをビルド

まずBoostをビルドするためのビルドツールであるbjamを用意しなければなりません。普通であればboost.orgのサイト上からBoost JamをダウンロードしてきてそれでBoostをビルドすればいいだけですが、Boost1.45はどうやら現在最新のbjam3.1.18ではビルド出来ないようです。


解決方法としてはBoost1.45に同梱されているbjamを自分でビルドするという事です。VisualStudioを使っている場合は、Boostのルートディレクトリに入っている"bootstrap.bat"を実行すれば最新のbjamをビルドしてくれるようです。MinGWCygwinで実行する場合は"bootstrap.sh"を実行すれば普通はいけるはず。もしこれで上手くbjamが作れなかった場合はルートディレクトリ以下の"tools\build\v2\engine"の中にbjamのコード本体があるようなので、これを直接ビルドすればいけるかもしれません。(私の場合はそれで正常に生成されました)

■Boostのビルド

あとはbjamを実行してBoostをビルドするだけです。コマンドラインから様々なオプションが指定出来ますが、通常は特に設定しなくても大きな問題はないはず。まぁDLL作りたい場合やシングル、マルチスレッド版が欲しい場合は別途指定すればOKかと。ここら辺はググれば解決します。

■ライブラリのリンク

当然作ったライブラリはリンクしなければなりません。VisualStudio系は".lib"、CygwinMinGWでは".a"とか言う名前になっているはずです。あとはリンク指定すればいいだけですが、ここでも結構戸惑います。主に大変だったのがBoost.FileSystemとBoost.Asioのリンクです。このふたつのライブラリはBoost.SystemというOSのエラーコードを返すラッパライブラリに依存しており、案の定このライブラリ自体もビルドしなくては使用出来ないライブラリです。なので、当然このBoost.Systemをまずはリンクせねばなりません。


Boost.SystemをリンクしたらBoost.FileSystemはその後に自分をリンクすれば使用出来るはずです。問題はBoost.Asioの方です。このライブラリは場合によって、Boost.Systemと更に別のライブラリを要求するようです。少なくとも私がMinGWでリンクしていた時にはないと動きませんでした。詳しくはこちらに。


"ws2_32"というWinSock関連のライブラリのようです。ソケットプログラムは殆どかじった程度にしか知らないので、なぜ必要になるのかはよくわかりませんが、これを先にリンクしておかないと動きませんでした。あとBoost.Asioの場合はマルチスレッド版の方をリンクしないと多分ダメでしょう。それを注意してビルド、リンクすれば長い道の果てにようやくネットワークのプログラムが動いてワクワクと出来るはずです、きっと。

■正直な感想

ライブラリを使う際にビルドとかリンクするのが一番めんどい。