5.7. Glibc-2.10.1

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

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

5.7.1. Glibc のインストール

futex システムコールに受け渡される定数値がエラーを引き起こす場合があるため修正します。 これを行っておかないと pthread_mutex の処理が失敗します。

cp -v nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S{,.orig}
sed -e 's/FUTEX_WAIT\( | FUTEX_CLOCK_REALTIME, reg\)/FUTEX_WAIT_BITSET\1/' \
        <nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S.orig \
        >nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S

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

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

Glibc は i386 をサポートしなくなりました。開発者によると x86 マシンに対してはコンパイラフラグとして -march=i486 を指定する必要があります。 これを実際に指定する方法はいくつかあります。 もっとも試してみれば分かりますが、ビルド時の変数 「CFLAGS」 にて設定しておくのが一番です。 Glibc の内部的なビルドシステムが利用する CFLAGS を上書き設定するのとは別に configparms ファイルという特別なファイルを使って CFLAGS に対して追加設定を行うこともできます。 -mtune=native というフラグも必要で -march を設定した際に変更される -mtune の値を適切にリセットします。

case `uname -m` in
  i?86) echo "CFLAGS += -march=i486 -mtune=native" > configparms ;;
esac

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

../glibc-2.10.1/configure --prefix=/tools \
    --host=$LFS_TGT --build=$(../glibc-2.10.1/scripts/config.guess) \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.18 --with-headers=/tools/include \
    libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes

configure オプションの意味:

--host=$LFS_TGT, --build=$(../glibc-2.10.1/scripts/config.guess)

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

--disable-profile

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

--enable-add-ons

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

--enable-kernel=2.6.18

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

--with-headers=/tools/include

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

libc_cv_forced_unwind=yes

ここでビルドする Glibc には 「forced unwind」 サポートを必要とします。 ただここではクロスコンパイルが行われているため、自動的にはそのサポートが為されません。 そこでコマンドラインから明示的に変数値を設定することで configure スクリプトに対してそのサポートを有効とするように指示します。

libc_cv_c_cleanup=yes

同じく Glibc には 「C cleanup handling」 サポートを必要とします。 クロスコンパイル時には自動的には検出されないため、明示的に指定します。

ビルド中には以下のようなメッセージが出力されるかもしれません。

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.10.1」 に示される手順に従ってください。

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

make install

本パッケージの詳細は 6.9.4. 「Glibc の構成」 を参照してください。