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

5. メインのCライブラリとしてのインストール

このセクションでは、glibc2をメインのCライブラリとしてインストールする方法を 説明します。新しくコンパイルされるプログラムは、オプション指定をしない 限り、このライブラリにリンクされるようになります。

RedhatかDebianを使っていて、適切なebファイルをダウンロードしたのであれ ば、RedhatかDebianのインストールインストラクションをご覧下さい。その 場合、このセクションは読み飛ばしてかまいません。

5.1 ソースからのライブラリ構築

この節では、ソースから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
 

5.2 インストールの準備

ソースからインストールする場合にせよ、バイナリからインストールする場合 にせよ、新しいライブラリの準備のために、いくつかのファイルを待避する 必要があります。新しくコンパイルされるプログラムは、glibcにリンクされ ますが、古いプログラムのうち、動的にリンクされたものはlibc5に依存している ため、単に古いバージョンを上書きするわけには行かないのです。

  1. 古いファイルを待避するための新しいディレクトリを作成します。
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
  2. 古いヘッダーファイルを/usr/includeから待避させます。
     mv /usr/include /usr/i486-linuxlibc5/include
     
    
  3. 新しいincludeディレクトリを作成し、ほかの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に置いています。 そういったライブラリを適切に使用するためには、それらのファイル やリンクの設定を適切が行われている必要があるのです。
  4. 新しいライブラリディレクトリ(/usr/i486-linuxlibc5/lib)を /etc/ld.so.confファイルの先頭に加えます。 glibcがインストールされたあと奇妙なメッセージが出るのを避けるためには、 ld.so 1.8.8以降を使った方がよいでしょう。
  5. 古いCライブラリを新しいディレクトリに移動/コピーします。
     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.5libc.so.5は、移動せずにコピーしてください。 これらはlinuxを起動する際に使われるプログラムが必要とするファイルであり、 ルートドライブパーティションになくてはならないからです。
  6. /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
     
    
  7. ライブラリを移動したら、ライブラリキャッシュを更新します。
     ldconfig -v
     
    

5.3 バイナリパッケージからのインストール

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
 
異なったアーキテクチャかバージョンを使用している場合は、適当なファイル名 に読み替えてください。

5.4 ソースからのインストール

ライブラリをソースからインストールするには次のようにします。

 make install
 ldconfig -v
 

5.5 gcc specsファイルの更新

インストールの最終段階は、バイナリからの場合もソースからの場合も、 リンクが適切に行われるようにするための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ファイルの例 節を参照してください。

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

インストール完了を確認するために、次のプログラムをファイルとして 作成してください。

 #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を指すように変更してください。


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