經過find或者locate指令定位到連接文件,查看連接文件是否正確的指向了咱們但願的lib,若是不是,用 ln -sf */libxxx.so.x */libxxx.so 指令修改它。linux
編譯程序遇到:/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-devubuntu