次のページ 前のページ 目次へ

4. テストライブラリとしてのインストール

この節では、glibc2をテストライブラリとしてインストールする方法について 説明します。オプション指定をしない限り、コンパイルしたものは、既存の ライブラリにリンクされます。かなりの数のファイルにパスを記述する必要 があるので、ソースからインストールを行わなくてはならないでしょう。

4.1 コンパイルとインストール

必要条件

フルライブラリとアドオンのコンパイルに、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
 

4.2 ダイナミックローダのアップデート

  1. 新しい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
     
    

4.3 gccの設定

インストールの最後のステップは、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ファイルのサンプル セクションを参照してください。

4.4 ヘッダーファイルへのリンクのアップデート

新しいディレクトリの下に、ほかのディレクトリへのリンクを張ります。

 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にインストールしてください)

4.5 インストール完了の確認

インストール完了を確認するために、次のプログラムを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!"というメッセージが出れば、インストールは成功です。


次のページ 前のページ 目次へ