gcc
またld
、ライブラリの検索パスを指定する多くの方法を提供します。その中には-rpath
、-L
フラグがあります。マンページは、これら2つのフラグの違いを明らかにしておらず、事実上、各フラグがライブラリをライブラリ検索パスに追加すると述べています。しかし、両方のフラグがまったく同じことをするのは奇妙に思えます。これら2つのオプションの違いは何ですか?
gcc
またld
、ライブラリの検索パスを指定する多くの方法を提供します。その中には-rpath
、-L
フラグがあります。マンページは、これら2つのフラグの違いを明らかにしておらず、事実上、各フラグがライブラリをライブラリ検索パスに追加すると述べています。しかし、両方のフラグがまったく同じことをするのは奇妙に思えます。これら2つのオプションの違いは何ですか?
回答:
マンページの古いコピーを読んでいる必要があります(強調を追加):
-rpath = dirランタイムライブラリの検索パスに
ディレクトリを追加します。これは 、ELF実行可能ファイルを共有オブジェクトにリンクするときに使用されます。すべての-rpath 引数は連結され、ランタイムリンカーに渡さ れます。ランタイムリンカーは、それらを使用して実行時に共有オブジェクトを検索します。
対。
-Lをsearchdir
--library-パス=をsearchdirの
ことをパスのリストへの追加パスをsearchdir ldが検索されます
アーカイブライブラリやldの制御スクリプト。
したがって、リンクするときにリンクするライブラリを探す場所を-L
指示ld
します。これは(たとえば)ビルドツリー内のライブラリに対してビルドするときに使用します。ライブラリは、によって通常のシステムライブラリパスに配置されmake install
ます。--rpath
一方、実行可能ファイル内にそのパスを格納するため、ランタイムダイナミックリンカはライブラリを見つけることができます。これは、ライブラリがシステムライブラリの検索パスの外にある場合に使用します。
-rpath=/some/weird/path
、必要-L /some/weird/path
です。2.gcc
必要に応じて使用します-Wl,-rpath=dir
。
-rpath-link
ますか?