コンパイル中にライブラリの複数のインスタンスが検索パスに存在する可能性があります。リンカーは、検索パスに含まれるディレクトリをどのような順序で処理しますか? 問題のプラットフォームは Sun OS です。
1 に答える
ディレクトリは、コマンド ラインで指定された順序で検索されます。コマンド ラインで指定されたディレクトリは、デフォルト ディレクトリの前に検索されます。オプションが表示される順序に関係なく、すべての -L オプションがすべての -l オプションに適用されます。LD_LIBRARY_PATH を使用して、ライブラリ検索パスを補足することもできます。ディレクトリ検索は、一致するライブラリを含む最初のディレクトリで停止します。
ただし、LD_LIBRARY_PATH は注意が必要です。
LD_LIBRARY_PATH
-l オプションで指定されたライブラリを検索するディレクトリのリスト。複数のディレクトリはコロンで区切ります。最も一般的なケースでは、セミコロンで区切られた 2 つのディレクトリ リストが含まれます。
dirlist1; dirlist2
次のように、任意の回数の -L を指定して ld を呼び出した場合:
ld . . . -Lpath1 . . . -Lpathn . . .
検索パスの順序は次のとおりです。
dirlist1 path1 . . . pathn dirlist2 LIBPATH
ディレクトリのリストにセミコロンが含まれていない場合、dirlist2 として解釈されます。
LD_LIBRARY_PATH は、実行時リンカーにライブラリ検索ディレクトリを指定するためにも使用されます。つまり、環境に LD_LIBRARY_PATH が存在する場合、実行時リンカーは、デフォルト ディレクトリの前に、その中で指定されたディレクトリを検索して、実行時にプログラムとリンクされる共有オブジェクトを探します。
詳しくはこちらをご覧ください。