gcc を任意の OS / CPU に合わせて構築する方法

たとえば手元に Windows XP がインストールされた PC があり、普段の日常生活やプログラミングには Windows を使用している場合で、ターゲットとなるコンピュータが CPU がとても遅い組み込み機器の場合は、手元の Windows XP 上でターゲットとなる機器用のコードを生成できる gcc を構築することによりその機器で動作するバイナリを直接吐き出すことができます。その機器で動くカーネルコンパイルも可能です。
このような手法を「クロスコンパイル」と呼びます。


gcc を用いてクロスコンパイル環境を構築する方法は簡単です。
手元の PC が LinuxFreeBSD であれば当然可能ですが、Windows XP 等の場合でも cygwin を入れれば可能です。


cygwin を入れて適当なディレクトリを作成し、そのディレクトリにターゲットとなる機器からコピーしてきた /usr/include、/lib、/usr/lib 等を置きます。このディレクトリを prefix と呼びます。


gcc を構築するためにはまず cygwin 上で binutils を構築する必要があります。http://core.ring.gr.jp/pub/GNU/binutils/ 等からダウンロードしてきて、tar xzvf で展開します。
configure で --with-included-gettext --target=mipsel-pc-linux-gnu --host=i686-pc-cygwin --build=i686-pc-cygwin --prefix=/tmp/files/ 等と指定して Makefile を生成して make するだけです。すると、「target」で指定した CPU および OS 用のバイナリを扱える binutils を生成できます。


次に gcc を構築します。http://core.ring.gr.jp/pub/GNU/gcc/ 等からダウンロードしてきて同様に展開し、configure で --enable-languages=c,c++ --with-included-gettext --disable-libgomp --enable-shared --enable-threads=posix --target=mipsel-pc-linux-gnu --host=i686-pc-cygwin --build=i686-pc-cygwin --prefix=/tmp/files/ --with-mpfr=/usr/local/ -v 等と指定して make すると、gcc が構築できます。



gcc の構築には数時間かかる場合もあります。一旦、gcc が構築されれば、あとはいつでもその gcc を用いてターゲット機器用のバイナリファイルを生成することができます。