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下,可以查看Makefile文件,查找關鍵字:-lXtst 來確定上下文中定義讀取lib包的位置。

 


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

apt-get install libxtst-dev
 
 還有就是在/etc/ld.so.conf文件中,創建新安裝的程序的lib庫位置的條目,然后使用ldconfig來載入,這個比較容易被忽略


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM