クロスコンパイラの作り方

導入

今回使うのは、Pantherが載ったG5マシンです。かなり速いマシンなので、コンパイル作業の時間短縮が期待できます。早速、Distcc で分散コンパイルを参考にLinux(x86)対応のクロスコンパイラを作ることにしましょう。

※現在はGentoo Linuxを用いる方法なので汎用性はありません。

用意するもの

  • binutils (Ringサーバ等で入手できます)
  • gcc (Ringサーバ等で入手できます)
  • glibcのGRP (Gentoo上でquickpkg glibc を実行して作ることもできます)
  • linux-headersのGRP (Gentoo上でemerge -B linux-headers を実行して作ることもできます)

binutilsをインストールします。

tar xvzf binutils-2.14.tar.gz
mkdir binutils-work
cd binutils-work
../binutils-2.14/configure --prefix=/usr/local --target=i686-linux
make
sudo make install

Mac OS Xの場合、/usr/local/binにパスが通っていませんので、パスを通す必要があります。下はbashの例。

export PATH=${PATH}:/usr/local/bin

glibcおよびlinux-headersを展開します。

sudo -s
cd /usr/local/i686-linux
tar xvjf /path/to/glibc-2.3.2-r9.tbz2
tar xvjf /path/to/linux-headers-2.4.21.tbz2
exit

/usr/local/i686-linux/usr/以下のファイルを/usr/local/i686-linuxに移動します。

sudo -s
cd /usr/local/i686-linux
cp -R -H usr/* ./
rm -r usr
exit

/usr/local/i686-linux/lib/libc.soを開き、GROUPの部分を適切なパスに変更します。

GROUP ( /usr/local/i686-linux/lib/libc.so.6 /usr/local/i686-linux/lib/libc_nonshared.a )

gccをインストールします。

tar xvzf gcc-3.3.2.tar.gz
mkdir gcc-work
cd gcc-work
../gcc-3.3.2/configure --prefix=/usr/local --target=i686-linux  --enable-shared --enable-threads --enable-languages=c,c++
make
sudo make install