便宜上、関連するマンページを以下に追加しました。
私の(誤った)最初の理解:,
でオプションを分離する必要がある場合、それは-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オプションは、リンクに明示的に含まれる共有オブジェクトが必要とする共有オブジェクトを見つけるときにも使用されます。
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,.
です。
あなたも書くことができる
-Wl,-rpath=.
その厄介なスペースを取り除くために。追加のコンマを追加するよりも、おそらく間違いなく読みやすくなります(まさにldに渡されるものです)。
もう一つ。 -Lオプションを指定する必要があるかもしれません同様に - 例えば
-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz
またはあなたはのようなエラーに終わるかもしれません
ld: cannot find -lbaz
マニュアルページでは、かなり明確になっています。 2つの引数(-rpath
および.
)をリンカーに渡す場合は、次のように記述できます。
-Wl,-rpath,.
または代わりに
-Wl,-rpath -Wl,.
あなたが提案した引数-Wl,-rpath .
は私の考えには意味がありません。 gccは、2番目の引数(.
)が正常に解釈されるのではなく、リンカーに渡されることになっていることをどのように認識するのですか?それを知ることができる唯一の方法は、all可能性のあるリンカ引数の内部知識があり、-rpath
がその後に引数を必要とすることを知っていた場合です。