天天看點

錯誤-解決/usr/bin/ld: cannot find -lxxx 問題

本文來自:http://blog.chinaunix.net/uid-354915-id-3573647.html

今天編譯程式遇到:/usr/lib64/gcc/x86_64-suse-Linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lxml2

網上查詢,記錄如下:

解決/usr/bin/ld: cannot find -lxxx 問題

問題:

在linux環境編譯應用程式或lib的source code時常常會出現如下的錯誤訊息:

/usr/bin/ld: cannot find -lxxx 

這些訊息會随着編譯不同類型的source code 而有不同的結果出來如:

/usr/bin/ld: cannot find -lc 

/usr/bin/ld: cannot find -lltdl 

/usr/bin/ld: cannot find -lXtst 

其中xxx即表示函式庫檔案名稱,如上例的:libc.so、libltdl.so、libXtst.so。

其命名規則是:lib+庫名(即xxx)+.so。

會發生這樣的原因有以下三種情形:

1 系統沒有安裝相對應的lib

2 相對應的lib版本不對

3 lib(.so檔)的symbolic link 不正确,沒有連結到正确的函式庫檔案(.so)

解決方法:

(1)先判斷在/usr/lib 下的相對應的函式庫檔案(.so) 的symbolic link 是否正确,若不正确改成正确的連結目标即可解決問題。

(2)若不是symbolic link 的問題引起,而是系統缺少相對應的lib安裝lib即可解決。

(3)如何安裝缺少的lib:

以上面三個錯誤訊息為例:

錯誤1缺少libc的LIB

錯誤2缺少libltdl的LIB

錯誤3缺少libXtst的LIB 

以Ubuntu為例:

先搜尋相對應的LIB再進行安裝的作業如:

apt-cache search libc-dev

apt-cache search libltdl-dev 

apt-cache search libXtst-dev

執行個體:

在進行輸入法gcin的Source Code的編譯時出現以下的錯誤訊息:

/usr/bin/ld: cannot find -lXtst

經檢查後發現是:

lib(.so檔)的symbolic link 不正确

解決方法如下:

cd /usr/lib

ln -s libXtst.so.6 libXtst.so

如果在/usr/lib的目錄下找不到libXtst.so 檔,那麼就表示系統沒有安裝libXtst的函式庫。

解法如下:

apt-get install libxtst-dev

自己注:如果是/usr/bin/ld: cannot find -liconv,則是因為iconv庫沒有安裝(如果在庫目錄下沒有找到的話),需要到http://ftp.gnu.org/gnu/libiconv/下載下傳安裝

解壓:tar -zxvf libiconv-1.14.tar.gz

cd ./libiconv-1,14

安裝(預設安裝到/usr/local下)

./configure

make

make install

總結:

      首先檢視/usr/lib目錄下是否有該庫檔案,以及是否連結正确。如果沒有安裝,安裝即可。如果連結錯誤,重建立立連結即可。

繼續閱讀