GCCでBoostをC++11用にビルドする

BoostにはC++11対応がなされており、ヘッダーオンリーライブラリなら

g++ -std=c++0x source.cc

とするだけで使うことができます。*1しかし、ビルドが必要なライブラリの場合には落とし穴があります。ライブラリを、bjamを使って通常の手順で生成した場合、-std=c++0x無しでコンパイルされてしまいます。これではリンクエラーになってしまいます。*2

この問題に関する日本語情報が見つからなかったので解決法を書いておきます。*3

解決法は非常に簡単です。user-config.jamというファイルを書いてホームディレクトリに置き、Boostをビルドするだけです。user-config.jamは次の形式に従って書いてください:

using gcc : バージョン : g++のコマンド名 : <cxxflags>-std=c++0x ;

例えばGCCのバージョンが4.6.1で、g++がg++-4.6.1という名前なら

using gcc : 4.6.1 : g++-4.6.1 : <cxxflags>-std=c++0x ;

となります。バージョンを省略して

using gcc : : g++-4.6.1 : <cxxflags>-std=c++0x ;

のようにすることもできます。jamファイルのトークンはスペース区切りであるため、上のjamファイルのスペースは省略できないことに注意してください。

あとはBoostのルートに移り、

./bootstrap.sh && ./bjam --layout=versioned

と打つだけでC++11対応のライブラリファイルが生成されます。

*1:当然Boostをダウンロードして設定を行う必要はありますが。

*2:追記:多くの場合問題は生じないようですが、-std=c++0xをつけてビルドするのが無難でしょう

*3:英語情報