20

この-lオプションは、リンカーに標準ディレクトリ内のライブラリを検索するように指示します。を使用すると-L、検索用に独自のライブラリ ディレクトリを指定できます。

質問: 順序の順序は、リンカーの wrt の-L場合と同様に、オプションでも重要ですか?-l

このリンク: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.htmlは、 のシーケンスについてあまり述べていません-L

編集 また、

コマンド ラインで指定されたディレクトリは、デフォルト ディレクトリの前に検索されます。

マニュアルページからのものです(ドミトリーが指摘したように)、これは、次のように順序を指定しても、ということですか。

gcc -lm hello.c -Lx

で指定されたディレクトリ-Lが優先されますか?

4

1 に答える 1

17

はい、-Lオプションの順序は重要です --l-Iオプションのように。

からman ld

-Lsearchdir
--library-path=searchdir

ld がアーカイブ ライブラリと ld 制御スクリプトを検索するパスのリストにパス searchdir を追加します。このオプションは何度でも使用できます。ディレクトリは、コマンド ラインで指定された順序で検索されます。コマンド ラインで指定されたディレクトリは、デフォルト ディレクトリの前に検索されます。オプションが表示される順序に関係なく、すべての -L オプションがすべての -l オプションに適用されます。

GCC のドキュメント、より具体的にはLinking Optionsが役に立ちます

編集
申し訳ありませんが、確かに、あなたが提供したリンクを確認できませんでした。「man ld」はコンソールに書き込むだけです。

Edit2オプションの前に
置いて簡単なテストを行いましたが、以前と比較して違いはありません-l-L-L-l

2番目の質問に答えると、これは

gcc -lm hello.c -Lx

これに等しい

gcc -Lx -lm hello.c

libm は、両方のテストでディレクトリ x/ で最初に検索されます。

ただし、-l<lib>ソース ファイルの前に配置することは悪い習慣であり、リンク時に未定義の参照が発生する可能性があることに注意してください。これが正しい方法です

gcc hello.c -Lx -lm 
于 2011-04-28T10:40:37.223 に答える