286

便宜上、以下に関連するマンページを追加しました。

私の(誤)最初の理解:オプションをで区切る必要がある場合、それは2番目がオプションの引数であることを意味する前にあるため,、2番目は別のオプションではないことを意味します。-Wl,-rpath

どうすれば議論-rpathできるのかわかりません!-Wl,.

私の頭の中で理にかなっているのはこれでしょう:

-Wl,-rpath .

これ-rpathにより、現在のディレクトリ引数を使用してリンカーオプションが呼び出されます。


man gcc:

-Wl、オプション

オプションとしてオプションをリンカに渡します。オプションにコンマが含まれている場合、コンマで複数のオプションに分割されます。この構文を使用して、オプションに引数を渡すことができます。たとえば、リンカーに-Wl,-Map,output.map渡し ます。-Map output.mapGNUリンカを使用する場合、 `-Wl、-Map =output.map'でも同じ効果を得ることができます。

男ld:

-rpath = dir

ランタイムライブラリの検索パスにディレクトリを追加します。これは、ELF実行可能ファイルを共有オブジェクトにリンクするときに使用されます。すべての-rpath引数は連結され、実行時リンカーに渡されます。実行時リンカーは、それらを使用して実行時に共有オブジェクトを検索します。-rpathオプションは、リンクに明示的に含まれている共有オブジェクトが必要とする共有オブジェクトを見つけるときにも使用されます。

4

4 に答える 4

327

gcc-Wl,xxxオプションは、コンマで区切られたトークンのリストを、スペースで区切られた引数のリストとしてリンカーに渡します。それで

gcc -Wl,aaa,bbb,ccc

最終的にリンカー呼び出しになります

ld aaa bbb ccc

あなたの場合、あなたは " ld -rpath ."と言いたいので、これをgccに渡します。あるいは、 :-Wl,-rpath,.の繰り返しインスタンスを指定することもできます。-Wl

gcc -Wl,aaa -Wl,bbb -Wl,ccc

aaaと2番目の間にコンマがないことに注意してください-Wl

または、あなたの場合、-Wl,-rpath -Wl,.

于 2011-07-03T10:47:33.557 に答える
70

あなたも書くことができます

-Wl,-rpath=.

その厄介なスペースを取り除くために。おそらく、余分なコンマを追加するよりも読みやすくなります(これは、まさにldに渡されるものです)。

于 2013-03-27T19:21:19.887 に答える
44

もう1つ。-Lオプションも指定する必要がある場合があります-例:

-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz

または、次のようなエラーが発生する可能性があります

ld: cannot find -lbaz
于 2012-03-08T01:46:41.897 に答える
12

マニュアルページはそれをかなり明確にします。-rpath2つの引数(および)をリンカーに渡したい場合は.、次のように記述できます。

-Wl,-rpath,.

または代わりに

-Wl,-rpath -Wl,.

あなたが提案した議論-Wl,-rpath .は私の心には意味がありません。gccは、2番目の引数(.)が正常に解釈されるのではなく、リンカーに渡されることになっていることをどのように知ることになっていますか?それを知ることができる唯一の方法は、考えられるすべてのリンカー引数についてインサイダーの知識が-rpathあり、その後に引数が必要であることを知っているかどうかです。

于 2011-07-03T10:47:44.163 に答える