-Wl、-rpath -Wl、


244

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

私の(誤)最初の理解:オプションを ,で、それは2番目の-Wlオプションが別のオプションではないこと,を意味し-rpathます。

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

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

-Wl,-rpath .

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


man gcc:

-Wl、オプション

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

man ld:

-rpath = dir

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


2
タイトルの最後にドット文字が抜けていませんか?
Celdor '19年

回答:


277

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,.


5
ああ、わかりました。リンカーにデータを渡すときに、オプションと引数の区別はありません。それは単なる文字列です。したがって、2番目の-Wlは冗長です。ありがとう:)
Blub

29
@Blub:冗長ではありません!それはあなた言う-Wl,-rpath,. 、あなた言う代替形式です-Wl,-rpath -Wl,.。正確には2つのうち1つは省略できません。
Kerrek SB、2011

OS X、つまりclangとld64でrpathを設定することに成功した人はいますか?
ベンアルブレヒト2018年

複数のrpathを指定する場合、構文はどのようになりますか?-Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib
Hintron

1
@Hintron:はい、または-Wl,-rpath,dir1,-rpath,dir2、または-Wl,-rpath=dir1,-rpath=dir2
Kerrek SB

63

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

-Wl,-rpath=.

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


3
gcc.gnu.org/onlinedocs/gcc/Link-Options.html#Link-Options-Wl,option「:GNUリンカを使用している場合、あなたはまた、-Wl、-Map = output.mapと同じ効果を得ることができます。」私には、GNUリンカー以外のリンカーを使用すると、=構文がサポートされない可能性があることを示しているようです。
Hintron

39

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

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

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

ld: cannot find -lbaz

10

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

-Wl,-rpath,.

または代わりに

-Wl,-rpath -Wl,.

-Wl,-rpath .あなたが提案した議論は私の心には意味をなさない。gccは、2番目の引数(.)が通常の解釈ではなくリンカーに渡されることをどのようにして知っているのでしょうか。それがそれを知ることができる唯一の方法は、それが可能性のあるすべてのリンカ引数について内部の知識を持っていた-rpathので、その後に引数が必要であることを知っていた場合です。


gccが引数を分析し、何かが意味をなさない場合、自動的にグループ化することは考えられないことではありません。
Blub
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.