錯誤解決error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file


轉自:http://blog.csdn.net/david_xtd/article/details/7625626

 

前提:ubuntu-debug機器上向SVN提交了pdu-IVT,想在別的普通機器上驗證直接make能否成功,編譯出的用戶程序能否運行。

 

工作PC機上裝有VMware,里面的ubuntu版本跟ubuntu-debug機器上相同,都是ubuntu 11.10版本。

VMware的家目錄下有個目錄pdu-IVT,是從SVN上更新出來之后,直接拷貝過來的。

 

在將ubuntu-debug機器上,make能成功,並且生成的二進制可執行程序pdu也能運行,並與switch成功建立連接;

但在工作PC機的VMware中,運行make時,提示錯誤:

 

[cpp]  view plain copy print ?
 
  1. /usr/bin/ld: cannot find -lCiscoEnergyWiseSdk  
  2. collect2: ld returned 1 exit status  
  3. make: *** [pdu] Error 1  

分析原因:ld提示找不到庫文件,而庫文件就在當前目錄中。

 

鏈接器ld默認的目錄是/lib和/usr/lib,如果放在其他路徑也可以,需要讓ld知道庫文件在哪里。

方法1:

編輯/etc/ld.so.conf文件,在新的一行中加入庫文件所在目錄;

運行ldconfig,以更新/etc/ld.so.cache文件;

方法2:

在/etc/ld.so.conf.d/目錄下新建任何以.conf為后綴的文件,在該文件中加入庫文件所在的目錄;

運行ldconfig,以更新/etc/ld.so.cache文件;

 

本人覺得第二種辦法更為方便,對於原系統的改動最小。因為/etc/ld.so.conf文件的內容是include /etc/ld.so.conf.d/*.conf

所以,在/etc/ld.so.conf.d/目錄下加入的任何以.conf為后綴的文件都能被識別到。

 

[cpp]  view plain copy print ?
 
  1. 本人的作法:  
  2. 1. 將所有的用戶需要用到的庫放到/usr/loca/lib;  
  3. 2. 在/etc/ld.so.conf.d/目錄下新建文件usr-libs.conf,內容是:/usr/local/lib  
  4. 3. #sudo ldconfig  

 

ld.so.cache的更新是遞增式的,就像PATH系統環境變量一樣,不是從頭重新建立,而是向上累加。

除非重新開機,才是從零開始建立ld.so.cache文件。


免責聲明!

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



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