5.7. Glibc-2.16.0

Glibc パッケージは主要な C ライブラリを提供します。 このライブラリは基本的な処理ルーチンを含むもので、メモリ割り当て、ディレクトリ走査、ファイルのオープン、クローズや入出力、文字列操作、パターンマッチング、算術処理、等々があります。

概算ビルド時間: 5.4 SBU
必要ディスク容量: 554 MB

5.7.1. Glibc のインストール

例えば LFS 7.1 などにおいて、rpc ヘッダーが適切にインストールされていない場合があります。 ホストシステムにそれらがインストールされているかを確認し、なければそれらをインストールするようにします。

if [ ! -r /usr/include/rpc/types.h ]; then
  su -c 'mkdir -p /usr/include/rpc'
  su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
fi

Glibc-2.16.0 を GCC-4.7.1 にてビルドする際の問題を以下により解消します。

sed -i 's/ -lgcc_s//' Makeconfig

Glibc のドキュメントでは、ソースディレクトリ以外の専用のビルドディレクトリを作成することが推奨されています。

mkdir -v ../glibc-build
cd ../glibc-build

次に Glibc をコンパイルするための準備をします。

../glibc-2.16.0/configure                             \
      --prefix=/tools                                 \
      --host=$LFS_TGT                                 \
      --build=$(../glibc-2.16.0/scripts/config.guess) \
      --disable-profile                               \
      --enable-add-ons                                \
      --enable-kernel=2.6.25                          \
      --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.16.0/scripts/config.guess)

このようなオプションを組み合わせることで /tools ディレクトリにあるクロスコンパイラー、クロスリンカーを使って Glibc がクロスコンパイルされるようになります。

--disable-profile

プロファイル情報を含めずにライブラリをビルドすることを指示します。 一時的なツールにてプロファイル情報が必要な場合は、このオプションを取り除いてください。

--enable-add-ons

スレッド処理のライブラリとして NPTL アドオンを利用することを指示します。

--enable-kernel=2.6.25

Linux カーネル 2.6.25 以上のサポートを行うよう指示します。 これ以前のカーネルは利用することができません。

--with-headers=/tools/include

これまでに tools ディレクトリにインストールしたヘッダーファイルを用いて Glibc をビルドすることを指示します。 こうすればカーネルにどのような機能があるか、どのようにして処理効率化を図れるかなどの情報を Glibc が得られることになります。

libc_cv_forced_unwind=yes

5.4.「Binutils-2.22 - 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

このパッケージにテストスイートは存在しますが、ここで実行することはできません。 この時点ではまだ C++ コンパイラーを構築していないためです。

[注記]

注記

テストスイートを正しく実行するためには、さらにロケールデータも必要になります。 ロケールデータは、システム内の各種ユーティリティが、日付、時刻、通貨などの情報を利用したり出力したりするために用いられるものです。 テストスイートの実行は不要と説明していることから、これに従って実行しない場合はロケールデータをここでインストールする必要はありません。 適切なロケールデータは次章にてインストールします。 それでもここでインストールするなら 6.9.「Glibc-2.16.0」に示される手順に従ってください。

パッケージをインストールします。

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 の構成」を参照してください。