主たる C ライブラリとして glibc 2 の導入について取り扱います。 他のバージョンとリンクするような特別なオプションを付けなければ、 このライブラリとリンクして新しいプログラムをコンパイルします。
Redhat 若しくは Debian を使用している場合と適切な rpm 若しくは deb ファイルをダウンロードした場合は、Redhat 若しくは Debian の導入 説明書を参照してください。その時はこのセクションは読み飛ばして下さい。
このセクションは glibc 2 とアドオンをソースからどのようにコンパイル するか説明します。最適化若しくは構成オプション又はバイナリを使いたく ない場合はライブラリをコンパイルしなければなりません。
64 MB のメモリのある i586@133 では、すべてのライブラリとアドオンを コンパイルするには約 3 時間かかります。i686@200 では、1 時間 30 分 です。
ソースをコンパイルするにはアーカイブからソースを取り出す必要がありま す。最良の方法は次の通り。
tar xzf glibc-2.0.5.tar.gz
cd glibc-2.0.5
tar xzf ../glibc-linuxthreads-2.0.5.tar.gz
tar xzf ../glibc-crypt-2.0.5.tar.gz
tar xzf ../glibc-localedata-2.0.5.tar.gz
ここでは glibc-2.0.5 ディレクトリ 内の linuxthreads, crypt, と
localedata ディレクトリにこれらのアドオンを構成しています。
glibc-2.0.5 ディレクトリ 内に compile という名称のディレクトリを作成 して、そこに移動しましょう。すべての作業をまっさらなこのディレクトリ で行います。(開発者は 'make clean' を完璧にする必要は無いと思います。)
mkdir compile
cd compile
そして ../configure を実行しましょう。アドオンパッケージを使用するには、
--enable-add-ons=linuxthreads,crypt,localedata のように
--enable-add-ons を指定する必要があります。
また、導入先のディレクトリを指定する必要があります。
/usr が良い選択でしょう。configure コマンドを次の
ようにしましょう。
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
コンパイルと検証するには次を実行しましょう。:
make
make check
ソースかバイナリからの導入作業によらずに、新ライブラリの為に準備として 幾つかのファイルを移動させる必要があります。新しいプログラムの コンパイルは glibc へリンクをしますが、古いプログラムはまだ libc 5 に依存して静的にリンクされているので単に古いバージョンを上書き出来 ません。
mkdir -p /usr/i486-linuxlibc5/lib
mkdir -p /usr/i486-linuxlibc5/lib
mkdir /usr/include
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
ln -s /usr/X11R6/include/X11 /usr/include/X11
ln -s /usr/lib/g++-include /usr/include/g++
リンクはご使用の配布物によって調整が必要でしょう。Slackware では
g++ ヘッダファイルは /usr/local/g++-include にあります。debian では
ヘッダファイルは /usr/include/g++ にあり、/usr/lib/g++-include に
/usr/include/g++ からリンクを張っています。後者の場合、多分元々の g++
インクルードディレクトリを /usr/include に移動したくなるでしょう。
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
/usr が / ではなく他のパーティションにある場合は libm.so.5 と libc.so.5
は移動しないでコピーすべきです。というのはそのライブラリを linux
開始時にプログラムが要求するのと、ルートドライブパーティションに
存在する必要があるからです。
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
ldconfig -v
あらかじめコンパイルしてあるバイナリから glibc を導入する場合に、 必要なので次を実行しましょう。:
cd /
gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
ldconfig -v
アーキテクチャやバージョンが異なる場合は、適切なファイル名を置き換えて
下さい。
ソースからの導入するためには次を実行しましょう。:
make install
ldconfig -v
導入の最後の段階 (バイナリとソースからの両方で) はプログラムのリンクが 正しくような gcc specs ファイルの更新です。gcc によって使用される specs ファイルを正確に決めるには次のようにします。
% gcc -v
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2
元のディレクトリとバージョンのディレクトリに移動して
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
そして、このディレクトリにある 'specs' ファイルを編集しましょう。
このファイルの /lib/ld-linux.so.1 を /lib/ld-linux.so.2 に変更しま
しょう。また、
glibc がプロファイルを行う時に gmon ライブラリを使用しないように
%{...:-lgmon}
という語句をファイル内から削除する必要があります。
specs ファイルの例題は
specs ファイルの例
セクションにあります。
導入のテストを行うには、glibc.c ファイルに次のプログラムを作成しましょう:
#include <stdio.h>
main()
{
printf("hello world!\n");
}
そしてプログラムをコンパイルしましょう。
% gcc glibc.c -o glibc
ldd を使用してプログラムを古い libc でなく glibc2 とリンクさせて検証しましょう。
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
このコンパイルと実行したとき "hello world!" を生成したら、
導入は成功です。