次のページ
前のページ
目次へ
このセクションでは、glibc2をメインのCライブラリとしてインストールする方法を
説明します。新しくコンパイルされるプログラムは、オプション指定をしない
限り、このライブラリにリンクされるようになります。
RedhatかDebianを使っていて、適切なebファイルをダウンロードしたのであれ
ば、RedhatかDebianのインストールインストラクションをご覧下さい。その
場合、このセクションは読み飛ばしてかまいません。
この節では、ソースからglibc2とアドオンをコンパイルする方法を説明します。
最適化レベルや設定を変更したい場合、およびバイナリパッケージのない場合、
ライブラリのコンパイルが必要になります。
必要条件
- 約150MBの空きディスク容量
- GNU make 3.75
- gcc >= 2.7.2 (2.7.2.1が望ましい) (訳注: gcc-2.8.1以上が必要です。)
- binutils 2.8.1 (alpha用にはsnapshotが必要)
- bash 2.0
- autoconf 2.12 (configure.inを変更する場合)
- texinfo 3.11
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
- 新しい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 に置いています。
そういったライブラリを適切に使用するためには、それらのファイル
やリンクの設定を適切が行われている必要があるのです。
- 新しいライブラリディレクトリ(
/usr/i486-linuxlibc5/lib )を
/etc/ld.so.conf ファイルの先頭に加えます。
glibcがインストールされたあと奇妙なメッセージが出るのを避けるためには、
ld.so 1.8.8以降を使った方がよいでしょう。
- 古い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を起動する際に使われるプログラムが必要とするファイルであり、
ルートドライブパーティションになくてはならないからです。
/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を指すように変更してください。
次のページ
前のページ
目次へ
|