プログラムのコンパイルの際、メインライブラリ以外のライブラリを使ということも あるでしょう。このセクションでは、このような場合にどうしたら良いのか を、前の2節のディレクトリとインストール名を使って説明します。実際に 使用するときは、各自の設定に合わせて名前を読み替えて下さい。
システムブートプロセスが使用するプログラムをコンパイルする時は、
注意が必要です。
プログラムが動的にリンクされていて、かつルートでないパーティションが
マウントされる前に使用されるプログラムである場合には、リンクされる
全てのライブラリがルートパーティションになくてはなりません。
前節のメインライブラリとしてglibcをインストールする場合
の説明に従えば、古いlibcはルートパーティション上の/lib
に
残されるので、ブートプロセス中、全てのプログラムが適正に動作するはずです。
しかし、/usr
が別のパーティションにあって、glibcをテスト
ライブラリとして/usr/i486-linuxglibc2
にインストールした場合、
glibcを使ってコンパイルされた新しいプログラムは、/usr
パーティションがマウントされるまで動作しません。
テスト用にインストールされた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の代わりにこのスクリプトを使用してください。
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"の代わりにこれを使えば良いわけです。