2011-04-28 116 views
18

-l選項告訴鏈接器在標準目錄中搜索庫。 和-L一樣,我們可以指定我們自己的庫目錄進行搜索。GNU鏈接器中的-l和-L選項的順序是否重要?

問題:順序的順序是否對-L選項也很重要,就像它爲-l w.r.t鏈接器一樣?

此鏈接:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html對-L的順序沒有太多的說明。

編輯 此外,在命令 行指定

目錄的默認之前被搜索 目錄

是從該名男子頁(如指出由梅德),這是否意味着即使我指定了如下的順序:

gcc -lm hello.c -Lx 

仍然用-L指定的目錄會首先給予優先?

+0

'仍然-L'指定的庫...:-L _不_指定庫(它指定搜索目錄) – sehe 2011-04-28 11:42:42

+0

@sehe感謝,這是一個錯字(現在我我還沒有收到第二個問題的答案。 – 2011-04-28 12:20:27

+0

可能重複[爲什麼gcc中'-l'選項的順序?](http://stackoverflow.com/questions/11893996/why-does-the-order-of-l-option-in-gcc -matter) – patrickvacek 2014-03-05 16:15:46

回答

14

是的,-L選項的順序很重要 - 就像-l-I選項。

man ld

-Lsearchdir
--library路徑= searchdir

添加路徑searchdir到的是ld搜索存檔庫和ld控制描述文件的路徑列表。您可以多次使用此選項。這些目錄按照它們在命令行中指定的順序進行搜索。在默認目錄之前搜索命令行上指定的目錄。無論選項出現的順序如何,所有-L選項都適用於所有-l選項。你

編輯
對不起,我確實錯過了檢查你給的鏈接

GCC documentations更具體Linking Options將是有益的。 「man ld」只能寫在控制檯中。

EDIT2
我做了一個簡單的測試將-l-L選項,它顯示-l

所以回答你的第二個問題之前沒有區別比較-L,這

gcc -lm hello.c -Lx 

等於這

gcc -Lx -lm hello.c 

在兩次測試中,都會在目錄x /中首先搜索libm。

請注意,雖然在源文件之前放置-l<lib>是一種不好的做法,但鏈接時可能會導致未定義的引用。這是正確的做法

gcc hello.c -Lx -lm 
+0

謝謝,那必須記錄在某處,我找不到它,如果你有一個鏈接確認這件事,我會很感激。 – 2011-04-28 10:42:39

+1

@Anisha當然,請參閱我的更新 – 2011-04-28 10:46:33

+0

感謝您:hattip:在問這裏之前,我曾用關鍵字'man ld'搜索過Google,第二個鏈接是:http://linux.die.net/man/ 8/ld-linux,我更喜歡_die.net_ wrt手冊頁,但是這次我錯誤地將'ld-linux'作爲'ld'。感謝您指出。 – 2011-04-28 10:50:05