コンパイル用途としてのGlibc2環境の構築 |
既存のメインGlibc2ライブラリ以外にバージョンの異なるGlibc2をインストールし、gccによるコンパイルで利用出来るようにします。 そもそも、既にGlibc2がインストールされているのに、別バージョンのGlibc2をインストールするかと言うと、レスキューディスクを作成する為です。 FD1枚で作成しようとすると、どうしても容量不足になりがちです。 そこで、よりサイズの小さいGlibc2が欲しく、バージョンの低いGlibc2のインストールを考えました。 今回使用するTurbolinux7環境ではglibc-2.2.4がインストールされており、今回新しくインストールするGlibc2バージョンは2.1.3です。インストール先は、/libではなく/usr/i686-linuxglibc2ディレクトリにインストールします。 インストールするGlibc2ライブラリはコンパイル時に使用するだけで、既存のプログラムから使用される事はありません。 今回のようにバージョンの落ちるライブラリをインストールする事は普段はないと思いますが、ここで紹介する方法は既存のGlibc2ライブラリより新しいバージョンのものをテスト的にインストールして使ってみる時にも有効です。 今回の参考文献 Glibc 2 HOWTO(http://www.linux.or.jp/JF/JFdocs/Glibc2-HOWTO.html) 作業の流れは次のようになります。 1.ソースコードのダウンロード 2.glibc-2.1.3の構築 3.gcc環境の構築(コンパイル時のglibc指定) 4.テストプログラムのコンパイル |
[root src]# tar zxvf glibc-2.1.3.tar.gz glibc-2.1.3アーカイブの解凍 [root src]# cd glibc-2.1.3/ [root glibc-2.1.3]# tar zxvf ../glibc-linuxthreads-2.1.3.tar.gz スレッド用ソースコード解凍 [root glibc-2.1.3]# tar zxvf ../glibc-crypt-2.1.tar.gz クリプト用ソースコード解凍 |
[root glibc-2.1.3]# vi shlib-versions 33行目あたりにある以下の行を見つけ、ダイナミックローダーの名前を変更します。 i.86-.*-linux.* ld=ld-linux.so.2 ↓ i.86-.*-linux.* ld=ld-linux.so.2.1 <--今回はlinux.so.2.1というファイル名を指定します。 |
[root glibc-2.1.3]# mkdir compile [root glibc-2.1.3]# cd compile インストール先は/usr/i686-linuxglibc2とします。 [root compile]# ../configure --prefix=/usr/i686-linuxglibc2 --enable-add-ons=linuxthreads,crypt --enable-shared --disable-profile --disable-debug [root compile]# make [root compile]# make install ダイナミックローダーだけは/libディレクトリに手動でコピーします。 [root compile]# cd /usr/i686-linuxglibc2/lib [root lib]# cp -a ld-2.1.3.so /lib/. [root lib]# cp -a ld-linux.so.2.1 /lib/. 次にインクルードディレクトリに手を加えます。 [root lib]# cd /usr/i686-linuxglibc2/include [root include]# ln -s /usr/src/linux/include/linux [root include]# ln -s /usr/src/linux/include/asm [root include]# ln -s /usr/X11R6/include/X11 |
[root include]# gcc -v Reading specs from /usr/lib/gcc-lib/i586-pc-linux/2.95.3/specs <--i586-pc-linuxや、2.95.3は環境により異なります。 gcc version 2.95.3 20010315 (release) 現在の設定をコピーして、今回のglibc用の設定を行います。 [root include]# cd /usr/lib/gcc-lib/ [root gcc-lib]# cp -a i586-pc-linux i686-linuxglibc2 <--現在の設定をコピー。新しい設定をi686-linuxglibc2としています。 specsファイルの編集を行います。 [root gcc-lib]# cd /usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/ [root 2.95.3]# vi specs ファイルの中に以下のような行があるので、この名前を変更します。 〜(省略)〜-dynamic-linker /lib/ld-linux.so.2.1 〜(省略)〜 <--ファイル名をld-linux.so.2からld-linux.so.2.1に変更します。 |
CFLAGS = -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include LDFLAGS = -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib |
int main( ) { printf("Hello World!\n"); exit( 0 ); } |
CC=gcc CFLAGS = -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/lib/gcc-lib/i686-linuxglibc2/2.95.3/include LDFLAGS = -b i686-linuxglibc2 -Wl,-rpath=/usr/i686-linuxglibc2/lib TARGET = test.exe OBJECTS = main.o all: $(TARGET) $(TARGET):$(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $(TARGET) ↑ここの空白8個はMakefile上ではTABでなければなりません。コピーして使う場合は注意を! .c.o: $(CC) $(CFLAGS) -c -o $@ $< clean: rm -f *.o $(TARGET) |
[root test]# make lddでリンク情報を調べ以下のようになっていればOKです。 [root test]# ldd test.exe libc.so.6 => /usr/i686-linuxglibc2/lib/libc.so.6 (0x40015000) /lib/ld-linux.so.2.1 => /lib/ld-linux.so.2.1 (0x40000000) 実行します。 [root test]# ./test.exe Hello World! |
以上でglibcの設定はおしまいです。
お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.