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


89

gccまたld、ライブラリの検索パスを指定する多くの方法を提供します。その中には-rpath-Lフラグがあります。マンページは、これら2つのフラグの違いを明らかにしておらず、事実上、各フラグがライブラリをライブラリ検索パスに追加すると述べています。しかし、両方のフラグがまったく同じことをするのは奇妙に思えます。これら2つのオプションの違いは何ですか?


2
多分あなたは考えてい-rpath-linkますか?
ams 2011

回答:


106

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

-rpath = dirランタイムライブラリの検索パスに
      ディレクトリを追加します。これは       、ELF実行可能ファイルを共有オブジェクトにリンクするときに使用されます。すべての-rpath       引数は連結され、ランタイムリンカーに渡さ       れます。ランタイムリンカーは、それらを使用して実行時に共有オブジェクトを検索します。


対。

-Lをsearchdir
--library-パス=をsearchdirの
      ことをパスのリストへの追加パスをsearchdir ldが検索されます
      アーカイブライブラリやldの制御スクリプト。

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


16
注:1。必要な場合、ほとんどの場合-rpath=/some/weird/path、必要-L /some/weird/pathです。2.gcc必要に応じて使用します-Wl,-rpath=dir
N。「代名詞」m。

4
なぜ両方が必要なのかまだわかりません。私は上記のnmと同じ経験をしています。ビルド時にライブラリからどのような情報が必要ですか?考えられるhファイルは別として、原因は。しかし、それは私が推測する別のことです...
Fredrik Johansson

1
@FredrikJohanssonこれは、新しい質問の妥当な主題になります(もちろん、まだ質問されていないことを前提としています)。少なくとも利用可能なシンボルは必要ですが、おそらく他のものがあります。
derobert 2015年

4
フォローアップの質問が追加されました:stackoverflow.com/questions/28096133/…–
Fredrik Johansson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.