この節では、glibc2をテストライブラリとしてインストールする方法について 説明します。オプション指定をしない限り、コンパイルしたものは、既存の ライブラリにリンクされます。かなりの数のファイルにパスを記述する必要 があるので、ソースからインストールを行わなくてはならないでしょう。
フルライブラリとアドオンのコンパイルに、i586@133, 64MB 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=--enable-add-ons=linux-threads,crypt,localedata
のように指定する必要があります。インストール先のディレクトリも指定する
必要があります。/usr/i486-linuxglibc2というのが良いでしょう。
最終的に、コマンドラインは次のようになるでしょう。
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2
コンパイルとチェックは下記の通りです。
make
make check
make check
がうまくいったらライブラリをインストールします。
make install
ld.so
から/lib/ld-linux.so.2
へリンクを張ります。
ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2
このライブラリだけが、プログラムにリンクされるもののなかで唯一場所の
固定されているものです。/lib
へのリンクを使うことで、安定版のglibcが
できたときに、メインのCライブラリとしてのアップグレードが容易になります。
/etc/ld.so.conf
を編集します。この際に。ライブラリのあるディレクトリ
名の後に/libを加える必要があります。つまり<prefix>
/libのように
なり、前述の例で言えば、/usr/i486-linuxglibc2/lib
となります。
/etc/ld.so.conf
を編集後、
ldconfig -v
インストールの最後のステップは、gccが新しいライブラリを認識できるように
するための/usr/lib/gcc-lib
の修正です。まず、既存の設定をコピーする必要
があります。どの設定が現在使われているものかを調べるには、gccの-vオプ
ションを用います。
% 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-linuxglibc2
テスト用の新しいシステムディレクトリとバージョンディレクトリに移動します。
cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2
そして、そのディレクトリのファイルspecs
を編集します。
このファイルの中の/lib/ld-linux.so.1
を/lib/ld-linux.so.2
に変更します。
また、%{...:-lgmon}
と書かれた部分を削除します。
glibcはプロファイリングにgmonライブラリを使用しないからです。
サンプルのspecsファイルは
specsファイルのサンプル
セクションを参照してください。
新しいディレクトリの下に、ほかのディレクトリへのリンクを張ります。
cd /usr/i486-linuxglibc2/include
ln -s /usr/src/linux/include/linux
ln -s /usr/src/linux/include/asm
ln -s /usr/X11R6/include/X11
ncursesなど、新しいディレクトリにヘッダーファイルを入れるべき
ライブラリを使用している場合、/usr/include
からファイルをコピーするか
リンクを張ります。(ライブラリによっては、glibc2と一緒に再コンパイル
しないと適切に動作しないものがあります。その場合、そのパッケージを
単にコンパイルして/usr/i486-linuxglibc2
にインストールしてください)
インストール完了を確認するために、次のプログラムをglibc.cファイルとして 作成してください。
#include <stdio.h>
main()
{
printf("hello world!\n");
}
そして、"-b <base install directory> -nostdinc
-I<install directory>/include -I/usr/lib/gcc-lib/<new system dir>/
<gcc version>/include" というオプションでコンパイルします。
% gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc
(訳注)私のシステムでは下記のようにしないと正しくリンクされませんでした。
gcc -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/local/lib/gcc-lib/i686-linuxglibc2/2.8.1/include glibc.c -o glibc -L/usr/i686-linuxglibc2/lib
(-Lオプションがみそ)
lddを使って、プログラムが古いlibcではなく新しいglibc2にリンクされたことを 確認します。
% ldd glibc
libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.6.so (0x4000d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
コンパイルができて、正しいリンクが確認でき、実行したときに
"hello world!"というメッセージが出れば、インストールは成功です。