GCCをクロスビルドする
linux上で「mingw用バイナリを吐くgcc」をビルドする方法を調べた。
#正確には「linux(i386)ホスト上でmingw(32bit)用のバイナリを作る」gccがビルドしたかった
方法を説明したサイトはかなりいろいろあるけど見つけた中で一番簡単だったのはこれ。*1
> http://ffmpeg.zeranoe.com/blog/?p=383#more-383
以下のスクリプトを実行するだけでその場にgcc一式がビルドされる。すばらしく簡単。
# @Linuxホスト cd /path/to/mingw-dev/ wget http://zeranoe.com/scripts/mingw_w64_build/mingw-w64-build-3.6.4 bash mingw-w64-build-3.6.4 [--build-type=win32]
ちなみに、mingw-w64 はそういうプロダクト名であって64bit版のmingwでは無い(32bit版もある)ようだ。ひどい。
使い方
gccを直接使う場合
# @Linuxホスト /path/to/mingw-dev/i686-w64-i686/bin/i686-w64-mingw32-gcc hoge.c # @Windows.Mingw ./a.exe
autoconfを使う場合
--host を指定する。
大分非直感な気がするが、「コンパイルして得られたプログラムが動く」ホストを指定するものらしい。
じゃあ --target は何かというと、「「コンパイルされたコンパイラ」が出力するバイナリ」が動く環境を指定する…ようだ(自信無し)。
./configure --host=i686-w64-mingw32
make
configureの出すメッセージに ...whether we use cross compiler? ... yes みたいな行があれば、クロスコンパイラが指定出来てる気がする。
依存関係のある場合はCFLAGSとLDFLAGSで指定できる。
CFLAGS="-L/path/to/mingw/lib" LDFLAGS="-lgmp" ./configure --host=i686-w64-mingw32 make