web-dev-qa-db-ja.com

-Wl、-rpath -Wl、わかりません、

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

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

-rpath-Wl,.引数をどのように持つことができるかわかりません。

私の頭の中で意味があるのはこれだろう:

-Wl,-rpath .

現在のディレクトリ引数を指定して-rpathリンカオプションを呼び出す必要があります。


男gcc:

-Wl、オプション

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

男ld:

-rpath = dir

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

209
Blub

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

gcc -Wl,aaa,bbb,ccc

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

ld aaa bbb ccc

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

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

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

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

243
Kerrek SB

あなたも書くことができる

-Wl,-rpath=.

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

59
Mike

もう一つ。 -Lオプションを指定する必要があるかもしれません同様に - 例えば

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

またはあなたはのようなエラーに終わるかもしれません

ld: cannot find -lbaz
35
vince

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

-Wl,-rpath,.

または代わりに

-Wl,-rpath -Wl,.

あなたが提案した引数-Wl,-rpath .は私の考えには意味がありません。 gccは、2番目の引数(.)が正常に解釈されるのではなく、リンカーに渡されることになっていることをどのように認識するのですか?それを知ることができる唯一の方法は、all可能性のあるリンカ引数の内部知識があり、-rpathがその後に引数を必要とすることを知っていた場合です。

8
David Grayson