2010-06-02 88 views
4

性能/ C/C++編譯/設置 GCC C++鏈接器/庫不能找不到庫文件

在庫(-I)我有 libbost_system libbost_filesystem ... 和下圖書館搜索路徑(-L)我有 的/ home/etobkru/boost_1_43_0/boostBinaries/lib目錄

但我編譯時得到 G ++ -L /家庭/ etobkru/boost_1_43_0/boostBinaries/lib目錄/ -o 「searchDirs」 ./ main.o -llibboost_system -llibboost_filesystem -llibboost_regex /us R/LIB/GCC/i586的-SUSE Linux的/ 4.1.2 /../../../../ i586的-SUSE Linux的/斌/勞工處:找不到-llibboost_system

我有嘗試使用libbost_system.so和libbost_system.a但我得到相同的錯誤。我在做什麼錯誤,爲什麼不能找到這些文件。因爲他們在那裏?

+0

可能重複[在/ usr /斌/勞工處:找不到-llibeststring.a(http://stackoverflow.com/questions/2947239/usr-bin-ld-cannot-find- llibeststring-a) – Troubadour 2010-06-02 13:48:37

回答

9

您不需要名稱中的「lib」部分。只是

-lboost_system -lboost_filesystem -lboost_regex 
+0

謝謝:)作品:) – hidayat 2010-06-02 14:21:55

1

我知道事情有點過了,但是你可以試試-l:libbost_system.so,它會查找一個名稱正確的庫。

1

其實經過多次挫折,我決定閱讀ld的手冊頁!

l namespec --library = namespec 將由namespec指定的存檔或目標文件添加到要鏈接的文件列表中。此選項可以使用任意次數。如果namespec的格式爲:filename,則ld將在庫路徑中搜索名爲filename的文件,否則它將在庫路徑中搜索名爲libnamespec.a的文件。

因爲我的特定庫是沿着myfoobar.dll的行東西沒有工作,直到我意識到我想讓ld使用實際的文件名。正如其他人已經用截圖張貼如何將庫添加到鏈接器,我所需要做的就是將字段中的'myfoobar'更改爲':myfoobar.dll',並且它工作正常。

您應該使用':'來確定文件名的真實位置,以便搜索並遠離沒有它的默認文件名格式。希望這可以減輕挫折感。

香酥的