2011-04-28 11 views
18

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

質問:リンカの-l w.r.tのように、-Lオプションの順序も重要ですか?

このリンク:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.htmlは、-Lのシーケンスについてあまり言及していません。また、コマンドに 行を指定

ディレクトリがデフォルトの前 ディレクトリ

を検索され

EDIT は(ドミトリーで指摘したように)manページからのもので、これを行いますたとえ注文しても、次のような注文をしても意味があります:

gcc -lm hello.c -Lx 

-Lで指定されたディレクトリは、先に優先権が与えられますか?

+0

'まだ-L'で指定されたライブラリは...:_not_ライブラリを指定しない-Lは – sehe

+0

@seheのおかげで、それは私が「今(タイプミスだった(それは検索ディレクトリを指定します)編集しました)、私はまだ私の2番目の質問に対する答えを受けていません。 –

+0

[gccの '-l'オプションの順序はどうなるのですか?](http://stackoverflow.com/questions/11893996/why-does-the-order-of-l-option-in-gcc -matter) – patrickvacek

答えて

14

はい、-Lの順番は重要です。ちょうど-l-Iオプションのようです。 man ld

-Lsearchdir
--library-パス=をsearchdir

から

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

編集
申し訳ありませんが、確かに私はあなたが与えてくれたリンクをチェックするために逃したため

GCC documentations、より具体的にLinking Options

は有用であろう。 "man ld"はコンソールに書き込むことができます。

EDIT2
私は-l-L前のオプションを入れて簡単なテストをしたし、それが何の違いだからあなたの2番目の質問に答える-l

-Lに比較を示していない、この

gcc -lm hello.c -Lx 

に等しいですこの

gcc -Lx -lm hello.c 

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

ソースファイルの前に-l<lib>を置くことは悪い習慣であり、リンクするときに未定義の参照につながる可能性があります。これが正しい方法です

gcc hello.c -Lx -lm 
+0

ありがとうございました、どこかに書かれている必要があります。見つけられません。リンクを確認していただければ、感謝します。 –

+1

@Anisha確かに、私の更新を参照 –

+0

あなたに感謝しています:hattip:私はここで質問する前にキーワード 'man ld'と私が得た第二のリンクで検索しました:http://linux.die.net/man/ 8/ld-linux、私は_die.net_ wrtのmanページよりも好きですが、今回はld-linuxと間違っていました。指摘してくれてありがとう。 –

関連する問題