FreeBSDでglibcをクロスコンパイル
FreeBSDでglibcをクロスコンパイル出来たのでメモ。
コンパイル出来たけど使い道が思いつかない…
クロスコンパイルにはPortsのemulators/linux_dist-gentoo-stage3を使う。
ターゲットはLinux。
クロスコンパイルの手順
★ソースの用意
バージョン2.3.6ならコンパイル出来たので、このバージョンのソースを用意する。
適当なミラーからglibc-2.3.6.tar.bz2とglibc-linuxthreads-2.3.6.tar.bz2をダウンロードする。
★ファイルの展開
作業ディレクトリに移動してglibcのソースを展開する。
さらに、展開されたglibcのディレクトリに移動して、glibc-linuxthreadsのソースを展開する(ここがポイント)。
# mkdir /usr/local/gentoo-stage3/tmp/glibc # cd /usr/local/gentoo-stage3/tmp/glibc # tar xjvf 適当なパス/glibc-2.3.6.tar.bz2 # cd glibc-2.3.6 # tar xjvf 適当なパス/glibc-linuxthreads-2.3.6.tar.bz2
★コンパイル
ビルド用のディレクトリを作る。
# cd .. # mkdir build
linux_dist-gentoo-stage3環境にchrootする。
# cd /usr/local/gentoo-stage3 # mount_devfs devfs dev # chroot `pwd` # cd /tmp/glibc/build
configureを下記の通りにする。
# ../glibc-2.3.6/configure \
--prefix=/hoge \
--enable-add-ons=linuxthreads \
--without-__thread
makeをするが、途中で「ELF binary type "0" not known.」と言うエラーメッセージが出て止まったら、FreeBSD環境からbrandlfでLinuxのバイナリだと教えてやる。
# brandelf -t Linux /usr/local/gentoo-stage3/tmp/glibc/build/elf/ld-linux.so.2
makeが終わったら、「make install」をする前に、/usr/local/gentoo-stage3/tmp/glibc/build/elf以下の実行ファイル全部にbrandlfをする。
さらに/hoge/etc/ld.so.confを空ファイルで用意する。
(linux_dist-gentoo-stage3環境で) # mkdir -p /hoge/etc # touch /hoge/etc/ld.so.conf