5.8. ツールチェーンの調整

一時的な C ライブラリをインストールしました。 これ以降の章でコンパイルしていくツール類は、このライブラリをリンクしていきます。 リンクを行うにはクロスコンパイラのスペックファイルを修正して /tools ディレクトリにあるダイナミックリンカを指し示すようにします。

具体的にはコンパイラの 「スペック (specs) 」 ファイルをダンプして、これが参照されるディレクトリに置きます。 以下では単純な sed コマンドによる置換によって GCC が利用するダイナミックリンカを変更します。 ここで為すことは /lib ディレクトリ内 (ホストが 64 ビットなら /lib64 ディレクトリ内) のダイナミックリンカファイルへの参照を探し出し、これを新しい /tools への参照へと調整することです。

作業を正確に行うために、以下のコマンド実行にあたってはコピー・ペーストによりコマンド入力を行うことをお勧めします。 そしてスペックファイルを開いて、ダイナミックリンカの配置場所を示す記述がすべて適切に調整されていることを確認してください。 必要に応じて 5.2.「ツールチェーンの技術的情報」 を読み直し、ダイナミックリンカのデフォルト名を確認してください。

SPECS=`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/specs
$LFS_TGT-gcc -dumpspecs | sed \
  -e 's@/lib\(64\)\?/ld@/tools&@g' \
  -e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS
echo "New specs file is: $SPECS"
unset SPECS
[注意]

注意

この時点において新しく構築したツールチェーンの基本的な (コンパイルやリンクなどの) 機能が正しく動作していることを確認する必要があります。 健全性検査 (sanity check) を行うために以下を実行してください。

echo 'main(){}' > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'

問題なく動作した場合はエラーがなかったということで、最後のコマンドから出力される結果は以下のようになるはずです。

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

ダイナミックリンカのディレクトリは /tools/lib に、あるいは 64 ビットマシンであれば /tools/lib64 になります。

コマンドの出力結果が上と異なっていたり、あるいは何も出力されなかった場合は、何かがおかしいことを意味します。 どこに問題があるのか調査・再試行を行って解消してください。 解決せずにこの先に進まないでください。 おかしいとすれば、上で行ったスペックファイルの修正に何か問題があったのかもしれません。 もしそうであったなら、スペックファイルの修正を、コマンドのコピー・ペースト作業に十分注意して再度行ってください。

すべてが終了したらテストファイルを削除します。

rm -v dummy.c a.out
[注記]

注記

次節にてビルドする Binutils では、ツールチェーンが正しくビルドできているかどうかを改めてチェックします。 もし Binutils のビルドが失敗したなら、それはここまでに行ってきた Binutils、GCC、Glibc のビルドに失敗していることを意味します。