web-dev-qa-db-ja.com

`-rpath-link`と` -L`の違いは何ですか?

goldの男はこう述べています:

  -L DIR, --library-path DIR
          Add directory to search path

  --rpath-link DIR
          Add DIR to link time shared library search path

Bfdのldは、-rpath-linkは、再帰的に含まれるsosに使用されます。

ld.lldも引数としてリストしません。

誰かがこの状況を明らかにしてくれませんか?

13
lanza

--rpath-linkオプションはbfd ldによって使用され、リンク時のシンボル解決を行うときにDT_NEEDED共有ライブラリを見つけるために使用される検索パスに追加されます。これは基本的に、(--rpathオプションまたはLD_LIBRARY_PATH環境変数によって設定された)シンボルを解決するときに動的リンカーが何をするかを模倣しようとするときに、ランタイム検索パスとして何を使用するかをリンカーに指示します。

共有ライブラリのシンボルを解決する場合、GoldはDT_NEEDEDエントリに従いません。そのため、--rpath-linkオプションは無視されます。これは意図的な設計の決定でした。リンクプロセス中に、間接的な依存関係が存在したり、ランタイムの場所に存在したりする必要はありません。

4
Cary Coutant