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

6. メインライブラリでないlibcを使ったコンパイル

プログラムのコンパイルの際、メインライブラリ以外のライブラリを使ということも あるでしょう。このセクションでは、このような場合にどうしたら良いのか を、前の2節のディレクトリとインストール名を使って説明します。実際に 使用するときは、各自の設定に合わせて名前を読み替えて下さい。

6.1 メインでないlibcを使う場合の注意

システムブートプロセスが使用するプログラムをコンパイルする時は、 注意が必要です。 プログラムが動的にリンクされていて、かつルートでないパーティションが マウントされる前に使用されるプログラムである場合には、リンクされる 全てのライブラリがルートパーティションになくてはなりません。 前節のメインライブラリとしてglibcをインストールする場合 の説明に従えば、古いlibcはルートパーティション上の/libに 残されるので、ブートプロセス中、全てのプログラムが適正に動作するはずです。 しかし、/usrが別のパーティションにあって、glibcをテスト ライブラリとして/usr/i486-linuxglibc2にインストールした場合、 glibcを使ってコンパイルされた新しいプログラムは、/usr パーティションがマウントされるまで動作しません。

6.2 テスト用glibcを使ったコンパイル

テスト用にインストールされたglibcを使ってコンパイルするときは、glibc のincludeを指すようにincludeパスを再設定する必要があります。"-nostdinc" 指定によって、通常のパスを無効にし、"-I/usr/i486-linuxglibc2/include" を指定することで、glibc includeを指定できます。gcc includeも指定する 指定する必要があります。これは/usr/lib/gcc-lib/i486-linuxglibc2/ 2.7.2.2/include にあります。(テスト用ライブラリがi486-linuxglibc2で gccのバージョンが2.7.2.2の場合)

テスト用glibcへプログラムをリンクする場合は、gccの設定を指定する必要 があります。これには、"-b i486-linuxglibc2"オプションを使います。

多くのプログラムでは、makefileの$CFLAGS$LDFLAGSオプションを下記の ように設定することで新しいオプションの指定ができます。

 CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2
 LDFLAGS = -b i486-linuxglibc2
 
configureスクリプトを使っている場合、configureを実行する前に $CFLAGS$LDFLAGSシェル変数を定義します (csh/tcshの場合env/setenv,sh/bash等ではset/exportを使用)。 これによって生成されるmakefileは適切な$CFLAGS$LDFLAGSを含んでいるはずです。 ただし、全てのスクリプトがこれらの変数を確認するわけではないので、 configureを実行した後、makefileを確認し、必要に応じて編集してください。

コンパイルしようとしているプログラムが、gccのみを使用しているときは (cppやbinutilsディレクトリを直接使用しなければ)、下記のスクリプトを使えば 毎回全オプションを指定せずに済みます。

 #!/bin/bash
 /usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
              -I/usr/i486-linuxglibc2/include \
              -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"
 
You can then use this script instead of "gcc" when compiling. gccの代わりにこのスクリプトを使用してください。

6.3 glibcがメインライブラリのときのlibc5を使ったコンパイル

glibcをメインライブラリとしてインストールしてあるときに、古いライブラリを 使ってプログラムをコンパイルするには、古いライブラリ用にパスを再設定 する必要があります。これには、"-nostdinc"オプションを指定して 通常のパスを無効にし、"-I/usr/i486-linuxlibc5"を使ってglibc(*) のincludeディレクトリを指定します。 また、"-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" を指定してgcc特有のincludeファイルディレクトリを指定します。 なお、パス名は各自の設定やgccバージョンに合わせて調整してください。

(*訳注) libc5の間違いと思われます。

古いlibcにプログラムをリンクするには、gccの設定を指定する必要があり ます。これは、オプション"-b i486-linuxlibc5"を指定すればOKです。

多くのプログラムでは。makefile中で$CFLAGS$LDFLAGSに新しいオプションを加えればよいはずです。

 CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5
 LDFLAGS = -b i486-linuxlibc5
 
configureスクリプトを使っているときは、configure実行前に、シェル変数 $CFLAGS$LDFLAGSを定義します (csh/tcshではenv/setenv, sh/bash等ではset/exportを使用)。 自動生成されたmakefileには、適切に$CFLAGS$LDFLAGSが記述されているはずですが、 全てのconfigureスクリプトがこれを行ってくれるわけではないので、 configure実行後makefileを確認し、必要に応じて編集してください。

もし、コンパイルしようとしているプログラムがgccのみを呼び出している ならば(cppやbinutilsを直接必要としていないならば)、下記のスクリプトを 使えば、毎回オプションを指定しなくてもすみます。

 #!/bin/bash
 /usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
              -I/usr/i486-linuxlibc5/include \
              -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"
 
You can then use this script instead of "gcc" when compiling.

コンパイル時に"gcc"の代わりにこれを使えば良いわけです。


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