2010-04-28 61 views
4

我一直試圖解決這個問題幾個小時了。 我正在使用gcc編譯一些c文件。這些文件需要libpbc,因此我使用-L標誌將gcc指向包含libpbc.so.1的目錄。該代碼在編譯時沒有錯誤但當我嘗試運行它,我收到以下錯誤信息:當使用-L專門查找庫時出現「加載共享庫時出錯」

./example.out:錯誤而載入共享庫:libpbc.so.1:無法打開共享對象文件:沒有這樣的文件或目錄

看着類似的問題,這個錯誤消息似乎表明,gcc無法找到libpbc.so.1。我知道gcc看到libpbc.so.1,因爲當我將libpbc.so.1重命名爲其他內容時,它無法編譯。

我正在使用-L指向包含libpbc.so.1的目錄。

不知道我可以採取什麼後續步驟來弄清楚。希望有任何想法。這個錯誤信息究竟意味着什麼?

編輯

運行LDD example.out結果:

linux-gate.so.1 => (0xb7fe3000) 
libpbc.so.1 => not found 
libgmp.so.3 => /usr/lib/libgmp.so.3 (0xb7f87000) 

回答

6
ldd example.out 

這將會給很多有關動態鏈接有用的信息。更具體地講,雖然,你的問題很可能在於在不是庫的路徑。

/etc/ld.so.conf 

請注意,如果您更新文件,則必須運行

ldconfig -v 
+0

我需要根來更新該文件?我想靜態鏈接這個庫。 – 2010-04-28 02:17:44

+0

ls -l /etc/ld.so.conf查看其權限。它通常只能由root寫入。 如果你想靜態鏈接庫,這是一個完全不同的話題。我的文章中的一切都是關於動態鏈接的。 如果您想要變爲靜態,請將-static參數用於gcc。有許多陷阱伴隨着靜態鏈接,因爲它並不總是做你認爲它正在做的事情。 :) – Bob 2010-04-28 02:22:36

+0

是的,靜態鏈接似乎已經打破了一切=( – 2010-04-28 02:45:33