(轉載)關於usr/bin/ld: cannot find -lxxx問題總結

張楊發表於2018-05-09

usr/bin/ld: cannot find -lxxx問題總結

linux下編譯應用程式常常會出現如下錯誤:
  /usr/bin/ld: cannot find -lxxx
       意思是編譯過程找不到對應庫檔案。其中,-lxxx表示連結庫檔案 libxxx.so。
       注:有時候,由於庫檔案是編譯過程臨時生成的,如果前面出錯也會導致出現這種情況,下面針對的是由於本機系統環境缺失而引起的。。
       一般出現這種錯誤有以下幾種原因:
1.系統缺乏對應的庫檔案;
2.版本不對應;
3.庫檔案的連結錯誤;
4.庫檔案路徑設定問題。
       對應第一第二種情況,可以通過下載安裝lib來解決,ubuntu大多數可以直接通過apt-get來安裝:
apt-get install libxxx-dev
       一般遇到這種問題筆者第一時間也是會去檢查系統是否已安裝該lib或者是否已選擇正確版本(只是習慣問題),如果還是不能解決問題,那麼,引起錯誤的原因不是連結錯誤就是庫檔案路徑問題了。

       通過find或者locate指令定位到連結檔案,檢視連結檔案是否正確的指向了我們希望的lib,如果不是,用 ln -sf */libxxx.so.x */libxxx.so 指令修改它。

 

 

編譯程式遇到:/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

       如果是庫檔案路徑引發的問題,可以到/etc/ld.so.conf.d目錄下,修改其中任意一份conf檔案,(可以自建conf,以方便識別)將lib所在目錄寫進去,然後在終端輸入 ldconfig 更新快取。

相關文章