2012-07-24 66 views
3

我有代碼塊中一個非常基本的C++項目,該項目利用了glfw.so和兩塊編譯從另一個項目,libHorde3D.solibHorde3DUtils.so .so文件其他庫。後者放在項目根文件夾中,而glfw在我的/usr/lib(我認爲)中的某處。代碼塊無法找到共享庫,即使搜索路徑設置

我已經將項目文件夾添加到代碼塊中的鏈接器和編譯器搜索路徑。我已將libHorde3D.solibHorde3DUtils.so以及glfw.so添加到鏈接程序設置選項卡中的鏈接庫。我認爲這將足夠基於以上類似的問題在這裏stackoverflow。

然而,當我按建:

ld cannot find -lHorde3D.so 
ld cannot find -lHorde3DUtils.so 
ld cannot find -lglfw.so 

我的系統是Arch Linux的64和我使用的GCC。 我也試過在/usr/lib/usr/lib64上覆制libHorde3D.solibHorde3DUtils.so,但沒有成功。

P.S.所有搜索路徑都將複製到調試和發佈目標中。

+0

你不應該把「.so」作爲鏈接標誌。使用它就像-llibrary .. – Aftnix 2012-07-24 14:33:06

+0

備註:設置CodeBlocks選項以在項目構建期間顯示完整的命令行,這有助於解決此類問題。 – 2012-07-24 14:33:49

回答

4

說,如果庫名稱爲libmylibrary.so,則鏈接到該庫的鏈接器選項看起來像-lmylibrary。請注意,lib前綴和.so後綴不存在 - 它們由鏈接器自動添加。在你的情況下,似乎你指定了錯誤的名字。嘗試從中刪除.so,這應該可以解決問題。

下面是如何通過製造類似的錯誤觸發失敗的簡單演示:

$ echo 'int main() { return 0; }' > test.c 
$ gcc -o test ./test.c -lc 
$ gcc -o test ./test.c -lc.so 
/usr/bin/ld: cannot find -lc.so 
collect2: ld returned 1 exit status 
$ 

第一個命令成功,第二個(使用不正確的庫名)失敗。

+0

這兩個答覆都是正確的,並修復了我愚蠢的錯誤。謝謝! – Kiril 2012-07-24 14:50:07

3

您不能通過「.so」。鏈接器選項

-lHorde3D -lHorde3DUtils -lglfw 

這樣的連接器將在庫路徑(個),「libHorde3D.so」等進行搜索。