2014-02-15 53 views
3

我想知道爲什麼克++鏈接庫ld不

g++ test1.o test2.o -o test.x -lgtk-x11-2.0 

作品,而

ld 'r test1.o test2.o -o test.o -lgtk-x11-2.0 

給出:

ld: cannot find -lgtk-x11-2.0 

,除非我明確地包含路徑添加-L/usr/lib/i386-linux-gnu

I嘗試了所有加入$LD_LIBRARY_PATHld.so.conf的路徑,但沒有任何工作,我不能解釋自己兩個電話之間的區別。

上指定它LD的手冊:

的路徑的默認組搜索(而不與'-L'被指定)取決於所仿真模式LD使用,在某些情況下也它如何配置

但嘗試不同的模擬(通過使用-m *仿真*)意味着segfaulting(可能因爲默認仿真elf_i386,是正確的)。

你能幫我解釋一下這個話題嗎?

回答

1

如果你是好奇的ld

ld --verbose | grep SEARCH 

通常使用的路徑,你不想使用ld明確地聯繫起來,它可能更好地與gcc獨自完成每一項任務,你應該更喜歡後者超過前者。

如果您想了解更多關於gcc設置

gcc -dumpspecs 

給你的是什麼樣子來看看的gcc的內部味道,你最終可能會採取一看gcc手冊如果你認真對待這個問題,但我不認爲這是值得的。

在編譯gcc時定義的設置也很重要,所以如果您真的想要掌握內部工作原理,您還應該學習如何從源代碼編譯gcc

TL;博士

只需使用gcc兩種編譯和鏈接,其他選項可能不值得的麻煩。

1

gcc -print-search-dirs(或g++)顯示編譯器使用的庫搜索路徑;可能內置了/usr/lib/i386-linux-gnu。該選項通過gcc傳遞給鏈接器,但未嵌入到鏈接器中。

嘗試添加-vg++ -v test1.o test2.o -o test.x -lgtk-x11-2.0 以查看鏈接器是如何被調用的。