ここまでの例はすべて、リンカーが、コマンド行上にリストされたライブラリを検索する場所を認識していることを前提としていました。デフォルトでは、リンカーがライブラリを検索するディレクトリとして認識しているのは、2 つの標準的な場所で、32 ビットのリンク編集では /usr/ccs/lib と /usr/lib、または 64 ビット SPARCV9 リンク編集では /usr/lib/sparcv9 です。これ以外のディレクトリを検索させたい場合には、これをリンカーの検索パスに明示的に付加する必要があります。
リンカー検索パスを変更するには、コマンド行オプションを使用するか、または環境変数を使用する、2 種類の方法があります。
-L オプションを使用すると、ライブラリ検索に新しいパス名を追加できます。このオプションは、コマンド行上で遭遇したその地点で、検索パスに影響を与えます。たとえば、次のコマンドは、
$ cc -o prog main.o -Lpath1 file1.c -lfoo file2.c -Lpath2 -lbar |
path1 (次に /usr/ccs/lib と /usr/lib) を検索し、libfoo を検出しますが、libbar を検出する場合は、path1 と path2 (次に /usr/ccs/lib と /usr/lib) を検索します。
-L オプションを使用して定義されたパス名は、リンカー専用で、実行時リンカーが使用するために作成される出力ファイルイメージ内には記録されません。
カレントディレクトリ内のライブラリの検索にリンカーを使用する場合は、-L を指定する必要があります。ピリオド (.) を使用して、カレントディレクトリを示すことができます。
-Y オプションを使用すると、リンカーが検索するデフォルトのディレクトリを変更できます。このオプションに指定する引数は、ディレクトリのリストをコロンで区切った書式で示します。たとえば、次のコマンドは、
$ cc -o prog main.c -YP,/opt/COMPILER/lib:/home/me/lib -lfoo |
ディレクトリ /opt/COMPILER/lib と /home/me/lib 内だけを調べて libfoo を検索します。-Y オプションを使用して指定したディレクトリは、-L オプションを使用して補足できます。
コロンで区切られたディレクトリリストをとる環境変数 LD_LIBRARY_PATH
を使用しても、リンカーのライブラリ検索パスを付加できます。この最も一般的な書式 LD_LIBRARY_PATH
では、セミコロンで区切られた 2 つのディレクトリリストをとります。最初のリストは、コマンド行上に指定されたリストよりも前に検索され、2 番めのリストはコマンド行上のリストよりもあとに検索されます。 64 ビットオブジェクトを処理ときには、アクティブな LD_LIBRARY_PATH
設定を上書きする LD_LIBRARY_PATH_64
環境変数もあります。
ここでは、LD_LIBRARY_PATH
の設定と、いくつかの -Lオプションを指定したリンカーの呼出しを組み合わせています。
$ LD_LIBRARY_PATH=dir1:dir2;dir3 $ export LD_LIBRARY_PATH $ cc -o prog main.c -Lpath1 ... -Lpath2 ... -Lpathn -lfoo |
有効な検索パスは、
dir1:dir2:path1:path2... pathn:dir3:/usr/ccs/lib:/usr/lib
です。
LD_LIBRARY_PATH
定義の一部にセミコロンが指定されてない場合は、指定されたディレクトリリストは、-L オプションのあとで解釈されます。次に例を示します。
$ LD_LIBRARY_PATH=dir1:dir2 $ export LD_LIBRARY_PATH $ cc -o prog main.c -Lpath1 ... -Lpath2 ... -Lpathn -lfoo |
ここでは、有効な検索パスは次のとおりです。
path1:path2... pathn:dir1:dir2:/usr/ccs/lib:/usr/lib
この環境変数は、実行時リンカーの検索パスを拡張する場合にも使用できます (詳細については、「実行時リンカーによって検索されるディレクトリ」 を参照してください)。この環境変数がリンカーに影響しないようにするには、-i オプションを使用します。