このセクションでは、glibc2をメインのCライブラリとしてインストールする方法を 説明します。新しくコンパイルされるプログラムは、オプション指定をしない 限り、このライブラリにリンクされるようになります。
RedhatかDebianを使っていて、適切なebファイルをダウンロードしたのであれ ば、RedhatかDebianのインストールインストラクションをご覧下さい。その 場合、このセクションは読み飛ばしてかまいません。
この節では、ソースからglibc2とアドオンをコンパイルする方法を説明します。 最適化レベルや設定を変更したい場合、およびバイナリパッケージのない場合、 ライブラリのコンパイルが必要になります。
i586@133, 64 MB RAMのシステムでは、全ライブラリとアドオンのコンパイルに 約3時間かかります。フル装備のi686@200では、約30分です。
コンパイルするためには、アーカイブを展開してソースを取り出す必要があり ます。最良の方法は次の通りです。
tar xzf glibc-2.0.6.tar.gz
cd glibc-2.0.6
tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
tar xzf ../glibc-crypt-2.0.6.tar.gz
tar xzf ../glibc-localedata-2.0.6.tar.gz
これにより、linuxthreads, crypt, localedataディレクトリがglibc-2.0.6
ディレクトリ内に置かれ、configureがこれらのアドオンを認識できるように
なります。
glibc-2.0.6
ディレクトリ内にcompileというディレクトリを作成し、そこへ
cdして、全ての作業をこの中で行います。これにより、インストール後の
消去作業が楽になります。(プログラム開発者が、'make clean'をまだ完全に
働くようにはしていないからです。)
mkdir compile
cd compile
次に../configure
を実行します。アドオンパッケージを使うためには、
--enable-add-ons=linux-threads,crypt,localedataのようにしてオプション
指定する必要があります。インストールするパスを指定する必要もあるかも
しれません。標準的なlinuxディストリビューションに合わせるには、
--prefix=/usrを指定します。(linuxシステムで/usr
がprefixとして指定さ
れるとconfigureはlibc.soやほかの重要なライブラリを/lib
に格納し、ほかの
pathを適切に調整します。)最終的なコマンドラインは次のようになるで
しょう。
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
コンパイルとチェックは次の通りです。
make
make check
ソースからインストールする場合にせよ、バイナリからインストールする場合 にせよ、新しいライブラリの準備のために、いくつかのファイルを待避する 必要があります。新しくコンパイルされるプログラムは、glibcにリンクされ ますが、古いプログラムのうち、動的にリンクされたものはlibc5に依存している ため、単に古いバージョンを上書きするわけには行かないのです。
mkdir -p /usr/i486-linuxlibc5/lib
/usr/include
から待避させます。
mv /usr/include /usr/i486-linuxlibc5/include
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++ includeディレクトリを/usr/includeに
戻しておいた方が良いでしょう。
上記以外の全てのヘッダーファイルやリンクの回復を行います。ncursesなど
の非標準ライブラリのいくつかは、ファイルか独自のincludeディレクトリへの
リンクを/usr/include
に置いています。
そういったライブラリを適切に使用するためには、それらのファイル
やリンクの設定を適切が行われている必要があるのです。
/usr/i486-linuxlibc5/lib
)を
/etc/ld.so.conf
ファイルの先頭に加えます。
glibcがインストールされたあと奇妙なメッセージが出るのを避けるためには、
ld.so 1.8.8以降を使った方がよいでしょう。
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を起動する際に使われるプログラムが必要とするファイルであり、
ルートドライブパーティションになくてはならないからです。
/usr/lib/*.o
ファイルを新しいディレクトリに移動します。
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
上の例では、i486-unknown-linuxがシステム名、2.7.2.2がバージョン番号
です。/usr/lib/gcc-lib/<システム>を古いシステムディレクトリにコピー
します。
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxlibc5
次に、元のディレクトリとバージョンディレクトリに移動します。
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
そして、そのディレクトリのspecsファイルをコピーします。このファイル中
で、/lib/ld-linux.so.1と書かれた部分を/lib/ld-linux.so.2に変更します。
また、%{...:-lgmon}という記述を全て削除します。glibcはプロファイリング
にgmonライブラリを使わないためです。specsファイルの例は
specsファイルの例
節を参照してください。
インストール完了を確認するために、次のプログラムをファイルとして 作成してください。
#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!"と表示
されればインストール成功です。
(訳注)make を使用してコンパイルする場合、設定にも因りますが、 /usr/bin/ccが呼ばれてリンクがうまく行かないことがあります。 この場合、gccを/usr/bin/ccにコピーするか、環境変数(またはmakeマクロ)CCを gccを指すように変更してください。