本パッケージの詳細は 6.9.4.「Glibc の構成」を参照してください。
Glibc パッケージは主要な C ライブラリを提供します。 このライブラリは基本的な処理ルーチンを含むもので、メモリ割り当て、ディレクトリ走査、ファイルのオープン、クローズや入出力、文字列操作、パターンマッチング、算術処理、等々があります。
例えば LFS 7.1 などにおいて、rpc ヘッダーが適切にインストールされていない場合があります。 ホストシステムにそれらがインストールされているかを確認し、なければそれらをインストールするようにします。
if [ ! -r /usr/include/rpc/types.h ]; then su -c 'mkdir -pv /usr/include/rpc' su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc' fi
Glibc のドキュメントでは、ソースディレクトリ以外の専用のビルドディレクトリを作成することが推奨されています。
mkdir -v ../glibc-build cd ../glibc-build
次に Glibc をコンパイルするための準備をします。
../glibc-2.20/configure \ --prefix=/tools \ --host=$LFS_TGT \ --build=$(../glibc-2.20/scripts/config.guess) \ --disable-profile \ --enable-kernel=2.6.32 \ --with-headers=/tools/include \ libc_cv_forced_unwind=yes \ libc_cv_ctors_header=yes \ libc_cv_c_cleanup=yes
configure オプションの意味:
--host=$LFS_TGT,
--build=$(../glibc-2.20/scripts/config.guess)
このようなオプションを組み合わせることで /tools
ディレクトリにあるクロスコンパイラー、クロスリンカーを使って Glibc がクロスコンパイルされるようになります。
--disable-profile
プロファイル情報を含めずにライブラリをビルドすることを指示します。 一時的なツールにてプロファイル情報が必要な場合は、このオプションを取り除いてください。
--enable-kernel=2.6.32
Linux カーネル 2.6.32 以上のサポートを行うよう指示します。 これ以前のカーネルは利用することができません。
--with-headers=/tools/include
これまでに tools ディレクトリにインストールしたヘッダーファイルを用いて Glibc をビルドすることを指示します。 こうすればカーネルにどのような機能があるか、どのようにして処理効率化を図れるかなどの情報を Glibc が得られることになります。
libc_cv_forced_unwind=yes
5.4.「Binutils-2.24 - 1回め」においてインストールしたリンカーは、クロスコンパイルにより生成したものです。 これは Glibc をインストールするまでは使えません。 これはつまり force-unwind サポートに対するテストは失敗することを意味します。 正しく動作するリンカーに依存するためです。 libc_cv_forced_unwind=yes の変数設定は、configure スクリプトに対してテストを実行しなくても force-unwind サポート機能を利用可能とすることを指示します。
libc_cv_c_cleanup=yes
上と同様に configure スクリプトに対して libc_cv_c_cleanup=yes を指示します。 これによりテストが省略され、C のクリーンアップハンドリング (cleanup handling) のサポートを指定します。
libc_cv_ctors_header=yes
さらに configure スクリプトに対して libc_cv_ctors_header=yes も指示します。 これによりテストがスキップされ gcc コンストラクターが設定されます。
ビルド中には以下のようなメッセージが出力されるかもしれません。
configure: WARNING: *** These auxiliary programs are missing or *** incompatible versions: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions.
msgfmt プログラムがない場合 (missing) や互換性がない場合 (incompatible) でも特に問題はありません。 msgfmt プログラムは Gettext パッケージが提供するもので、ホストシステムに含まれているかもしれません。
パッケージをコンパイルします。
make
パッケージをインストールします。
make install
この時点で以下を必ず実施します。 新しいツールチェーンの基本的な機能 (コンパイルやリンク) が正常に処理されるかどうかを確認することです。 健全性のチェック (sanity check) を行うものであり、以下のコマンドを実行します。
echo 'main(){}' > dummy.c $LFS_TGT-gcc 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 のいずれかにてビルドがうまくできていないことを意味します。
本パッケージの詳細は 6.9.4.「Glibc の構成」を参照してください。