1. ホーム
  2. gcc

[解決済み】-Wl,-rpath -Wlがわかりません。

2022-04-17 23:02:53

質問

便宜上、以下に関連するマニュアルを追加しました。

まず私の(誤った)理解ですが、もしオプションを , ということは、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オプションは、以下の場合にも使用されます。 共有オブジェクトの位置決め 共有オブジェクトが明示的に必要とする がリンクに含まれています。

解決方法は?

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

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