2011-07-03 5 views
154

便宜上、以下の関連するマンページを追加しました。私はわかりません-Wl、-rpath -Wl、

マイ(MIS)の理解最初:私はそれはそれは-rpathオプションの引数であることを意味し,前に来るので二-Wlは別のオプションではないことを意味し、,でオプションを分離する必要がある場合。

私は-rpath-Wl,.引数を持つ方法を理解できません!私の心の中で理にかなって何

はこれを次のようになります。

-Wl,-rpath . 

これは、現在のディレクトリ引数と-rpathリンカオプションを呼び出す必要があります。


男のGCC:

-Wl、 リンカにオプションとしてオプション

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

男LD:

-rpath = DIR

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

答えて

182

リンカの引数のスペース区切りのリストとしてのトークンのカンマ区切りのリストを渡し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と第二-Wlとの間にコンマが存在しないことに留意されたいです。

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

+4

私は今、リンカに物を渡している間にオプションや引数を区別していないことを理解しています。単なる文字列です。だから二番目の-Wlは冗長です!ありがとう:) – Blub

+21

@Blub:それは冗長ではありません!これは別の形式です。あなたは '-Wl、-rpath、.' *、もしくは' -Wl、-rpath -Wl、.'と言っています。正確に2つのうちの1つ、あなたは何も省略できません。 –

7

マニュアルページはかなり明確です。あなたはリンカに二つの引数(-rpath.)を渡したい場合は、あなたが私の心には意味がありません示唆し-Wl,-rpath .

-Wl,-rpath,. 

または代わり

-Wl,-rpath -Wl,. 

引数を書くことができます。 gccは、2番目の引数(.)が通常は解釈されずにリンカに渡されるはずであることを知っているはずです。 すべての可能なリンカーの引数の内部の知識を持っていた場合それが知ることができる唯一の方法だから、-rpathはそれの後に引数を必要と知っていた。

+0

gccが引数を分析することは想像もできませんが、何かが意味をなさない場合、自動的にグループ化されます。 – Blub

+10

実際には、それは –

29

もう1つのこと。あなたは、-Lオプションを指定する必要があり同様 - 例えば

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

またはあなたがも

-Wl,-rpath=. 

を書くことができ

ld: cannot find -lbaz 
50

のようなエラーで終わる可能性がありますその厄介な空間を取り除く。間違いなく余分なコンマを追加するよりも読みやすくなります(これは正確にldに渡されます)。

+0

です。DebianとFedoraのマニュアルページではこのように指定しています。 – jww

関連する問題