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

5. 主たる C ライブラリとして導入

主たる C ライブラリとして glibc 2 の導入について取り扱います。 他のバージョンとリンクするような特別なオプションを付けなければ、 このライブラリとリンクして新しいプログラムをコンパイルします。

Redhat 若しくは Debian を使用している場合と適切な rpm 若しくは deb ファイルをダウンロードした場合は、Redhat 若しくは Debian の導入 説明書を参照してください。その時はこのセクションは読み飛ばして下さい。

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

このセクションは 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
 

5.2 導入準備

ソースかバイナリからの導入作業によらずに、新ライブラリの為に準備として 幾つかのファイルを移動させる必要があります。新しいプログラムの コンパイルは glibc へリンクをしますが、古いプログラムはまだ libc 5 に依存して静的にリンクされているので単に古いバージョンを上書き出来 ません。

  1. 古いファイルを保持する為の新しいディレクトリを作成します:
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
  2. 古いヘッダファイルを /usr/include から退避する必要があります:
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
  3. 新しいインクルードディレクトリを作成し、他のインクルードファイル へのリンクの設定をします。:
     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 に移動したくなるでしょう。
  4. その他のヘッダファイルとリンクを回復しましょう。ncurses のような 非標準のライブラリが /usr/include に置いてあるか /usr/include にリンク を張っています。これらのファイルとリンクはその他のライブラリが当然 使用しているので回復しなければいけません。
  5. 新しいライブラリのディレクトリをトップディレクトリから (/usr/i486-linuxlibc5/lib のように) /etc/ld.so.conf ファイルに 追加しましょう。 glibc を導入するときの怪しいメッセージを回避できるので ld.so-1.8.8 を導入した方が良いでしょう。
  6. 新しいディレクトリへ古い 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.5 と libc.so.5 は移動しないでコピーすべきです。というのはそのライブラリを linux 開始時にプログラムが要求するのと、ルートドライブパーティションに 存在する必要があるからです。
  7. 新しいディレクトリへ /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
     
    
  8. ライブラリの移動の後でライブラリキャッシュを更新しましょう。
     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
 

元のディレクトリとバージョンのディレクトリに移動して

 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 ファイルの例 セクションにあります。

5.6 導入のテスト

導入のテストを行うには、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!" を生成したら、 導入は成功です。


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