MinGW(gcc 4.6.2)とBoost 1.48を使ってcfg1.7.0をビルドする
いままで軟弱にVS+BoostProでcfgをビルドしてましたが,漢なら黙ってmsysだろと言われていそうな気がしたのでやりましたよ*1。
まずはMinGWでBoost1.48をビルド
Boostを展開して,
$ bootstrap.sh
でうまくいくかなと思ったら,sys/wait.hが無いと言われました。*2
bootstrapではb2.exeやbjam.exeを作るところなので,他の環境でもいいだろうということで,今回はVS9のコマンドラインから
>bootstrap.bat
で作成しました。
続いて,msysからbjam.exeを使って
$ bjam -sTOOLS=mingw --toolset=gcc --stagedir="./stage/mingw" --without-python --without-mpi --build-type=complete variant=release link=static threading=multi runtime-link=static release debug stage -j2
しばしコーヒーブレイクします。
カレントディレクトリの./stage/mingw/libにMinGW用のBoostライブラリができあがります。
BOOSTのライブラリは
作成したライブラリをみると,libboost_(ライブラリ名)-mgw46-mt-s-1_48.aのような名前になっていると思います。
cfgのMakefile.config
cfgフォルダに移って
./configureでMakefile.configを作成します。
boostをmsysのhomeディレクトリで作成し,ライブラリディレクトリがstage/mingw/libにある場合
作成したMakefile.configファイルを以下のように修正します。
LIBBOOST_SUFFIX=-mgw46-mt-s-1_48 BOOST_VERSION=1_48 BOOST_DIR=/home/hoge/boost_1_48_0 LIBBOOST_DIR=/home/hoge/boost_1_48_0/stage/mingw/lib OPTIONS=
私の使っているmsysではMakefileでOSTYPEをmsysで認識していません。
リンク時にエラーが出る場合はcfgフォルダのMakefileを修正すればできるはずです。
MinGWのDLLから逃れるためには
上までのステップでmsys環境でcfgが動作しますが,それ以外の環境で動かそうとするとDLLが足りないというメッセージがでます。
ので,DLLがいらないように静的リンクをするようにcfg/Makefileの以下の部分を書き換えます。
cfg: $(OBJFILES) $(LIBFILES) $(CXX) $(CXXFLAGS) -std=c++0x -DBOOST_THREAD_USE_LIB -static-libgcc -static-libstdc++ -o cfg $(OBJFILES) -L$(LIBBOOST_DIR) $(LIBFILES) $(BOOST_LIBFILES)
これでcfg.exeの完成です。