web-dev-qa-db-ja.com

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

gccおよびldは、ライブラリの検索パスを指定する多くの方法を提供します。その中でも、-rpathおよび-Lフラグ。マンページでは、これらの2つのフラグに違いがないことが明らかになり、各フラグがライブラリ検索パスにライブラリを追加すると効果的に示されます。しかし、両方のフラグが正確に同じことを行うのは奇妙に思えます。これらの2つのオプションの違いはありますか?

74

マンページの古いコピーを読んでいる必要があります(強調を追加)。

-rpath = dir
ディレクトリをruntimeライブラリ検索パスに追加します。これが使用されます
ELF実行可能ファイルを共有オブジェクトにリンクする場合。すべて-rpath
引数は連結され、runtimeリンカーに渡されます。
を使用してruntime。で共有オブジェクトを見つけます。

vs.

-L searchdir
-library-path = searchdir
パスsearchdirをldが検索するパスのリストに追加します
アーカイブライブラリとld制御スクリプト。

そのため、-Lldに、リンク時にリンクするライブラリを探す場所を指示します。 (たとえば)ビルドツリー内のライブラリに対してビルドする場合、これを使用します。これは、make installによって通常のシステムライブラリパスに配置されます。一方、--rpathは、実行可能ダイナミックリンカーがライブラリを見つけることができるように、実行可能ファイル内にそのパスを格納します。ライブラリがシステムライブラリの検索パスの外側にある場合に使用します。

88
derobert