Go to main content
Oracle® Solaris 11.3 リンカーとライブラリガイド

印刷ビューの終了

更新: 2015 年 10 月
 
 

依存関係を持つ共有オブジェクト

共有オブジェクトは独自の依存関係を持つことができます。実行時リンカーが検索するディレクトリでは、共有オブジェクトの依存関係を検索するために実行時リンカーが使用する検索規則について説明しています。共有オブジェクトがデフォルト検索ディレクトリの中にない場合、実行時リンカーに検索場所を明示的に指示する必要があります。32 ビットオブジェクトの場合、デフォルト検索ディレクトリは /lib/usr/lib です。64 ビットオブジェクトの場合、デフォルト検索ディレクトリは /lib/64/usr/lib/64 です。デフォルト以外の検索パスが必要なことを示すには、依存関係のあるオブジェクトに実行パスを記録する方法がお勧めです。「実行パス」は、リンカーの –R オプションで記録できます。

次の例では、共有オブジェクト libfoo.so は、libbar.so に対する依存関係を持ちます。これは、実行時にディレクトリ/home/me/lib にあるものと予期されますが、ない場合はデフォルト位置にあるものと予期します。

$ cc -o libbar.so -G -K pic bar.c
$ cc -o libfoo.so -G -K pic foo.c -R/home/me/lib -L. -lbar
$ elfdump -d libfoo.so | egrep "NEEDED|RUNPATH"
    [1]  NEEDED        0x123         libbar.so.1
    [2]  RUNPATH       0x456         /home/me/lib

共有オブジェクトでは、依存関係を検索するために必要な「実行パス」すべてを指定する必要があります。動的実行可能ファイルに指定された実行パスはすべて、動的実行可能ファイルの依存関係を検索するためにだけ使用されます。これらの「実行パス」は、共有オブジェクトの依存関係を検索するために使用されることはありません。

LD_LIBRARY_PATH ファミリの環境変数の範囲は、よりグローバルです。これらの変数を使用して指定されたパス名はすべて、実行時リンカーによって、すべての共有オブジェクト依存関係を検索するために使用されます。これらの環境変数は、実行時リンカーの検索パスに影響を与える一時的なメカニズムとして便利ですが、製品版ソフトウェアではできるだけ使用しないようにしてください。詳細は、実行時リンカーが検索するディレクトリを参照してください。