リンカーとライブラリ

実行時リンカーが検索するディレクトリ

実行時リンカーが、/usr/lib、または /usr/lib/sparcv9 (64 ビット SPARCV9 ライブラリ) ライブラリを検出する場所として認識する標準的な場所は 1 つだけです。この他のディレクトリを検索する場合は、実行時リンカーの検索パスに明示的に追加する必要があります。

動的な実行可能プログラムまたは共有オブジェクトは、付加された共有オブジェクトとリンクされ、これらの共有オブジェクトは、実行時リンカーによるプロセスの実行中に再び配置される必要がある従属物として記録されます。リンク編集中には、1 つまたは複数のパス名を出力ファイル内に記録できます。これらのパス名は、実行時リンカーが共有オブジェクトの従属物を検索する場合に使用されます。この記録されたパス名は、「実行パス」と呼ばれます。


注 -

実行時リンカーのライブラリ検索パスをどのように修正したとしても、その最後の構成要素は、必ず /usr/lib になります。


コロンで区切られたディレクトリリストをともなう、-R オプションを使用すると、動的実行可能プログラムまたは共有ライブラリ内に実行パスを記録できます。次に例を示します。


$ cc -o prog main.c -R/home/me/lib:/home/you/lib -Lpath1 ¥
-Lpath2 file1.c file2.c -lfoo -lbar

上記の例では、動的実行可能プログラム prog 内に、実行パス /home/me/lib:/home/you/lib が記録されます。実行時リンカーは、共有オブジェクトの依存関係を配置する場合に、これらのパスを使用してから、デフォルトのロケーション /usr/lib を使用します。この場合、この実行パスは、libfoo.so.1libbar.so.1 の配置に使用されます。

リンカーは、複数の -R オプションを受け取り、コロンで区切られたこれらの指定内容をそれぞれ結合します。そのため、上記の例は、次のようにも示すこともできます。


$ cc -o prog main.c -R/home/me/lib -Lpath1 ¥
-R/home/you/lib -Lpath2 file1.c file2.c -lfoo -lbar

注 -

-R オプションを指定することによる履歴的に代替とは、環境変数 LD_RUN_PATH を設定して、リンカーがこれを使用できるようにすることです。LD_RUN_PATH および -R の適用範囲と機能は全く同じですが、この両方を指定した場合は、-R によって LD_RUN_PATH は上書きされます。