2011年1月3日月曜日

MinGWでBoostをコンパイル

プラットフォーム間で互換のあるコンパイルを考えてgcc, boostの開発環境を整えることにしてみました。
苦労したことを書きます.


今回の環境
  • Microsoft Visual C++ 2010 Express
  • MinGW(gcc version 4.5.0)
  • Boost(version 1.45.0)
Microsoft Visual C++を使用してBoostをコンパイルする場合はVisual Studioコマンドプロンプトを立ち上げて以下のコマンドを入力します.
bootstrap.bat
bjam

一方,MinGWを使用してBoostをコンパイルする場合はMinGWにパスを通したVisual Studioコマンドプロンプト上で作業します(MSYSのbash上ではうまくbjamがコンパイルできない).
パスを通す方法はプログラム環境の構築:パスの通し方が参考になると思います.加えてツールセットをgccにしてやる必要があります.
bootstrap.bat
bjam toolset=gcc
これでBoostのコンパイルに成功しました.

また,最近のMinGWの出力するバイナリはMinGWのDLLファイルをリンクするようです.
つまりMinGWがない環境では出力されたバイナリは実行できない,ということです.
これを回避するために必要なライブラリを静的リンクするように"-static-libgcc","-static-libstdc++"オプションを指定してやります.
例えば以下のように.
g++ -c -oregex.o regex.cpp
g++ -static-libgcc -static-libstdc++ -oregex.exe regex.o -lboost_regex-mgw45-mt-d-1_45
詳細は調べきれていませんがおそらくlibgccはMinGWのコアライブラリで,libstdc++はSTL関連のライブラリかと思われます.もちろん静的リンクするとファイルサイズが大きくなるので注意してください.

追記
libgccはgccを使用していると確実にリンクされるらしいです.
参考:http://www.wdic.org/w/TECH/libgcc
また,libstdc++はC++の標準ライブラリらしいです.
参考:http://www.wdic.org/w/TECH/libstdc%2B%2B

0 件のコメント:

コメントを投稿