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対応のライブラリファイルが生成されます。