1. 程式人生 > >錯誤解決error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file

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

前提: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時,提示錯誤:

/usr/bin/ld: cannot find -lCiscoEnergyWiseSdk
collect2: ld returned 1 exit status
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為字尾的檔案都能被識別到。

本人的作法:
1. 將所有的使用者需要用到的庫放到/usr/loca/lib;
2. 在/etc/ld.so.conf.d/目錄下新建檔案usr-libs.conf,內容是:/usr/local/lib
3. #sudo ldconfig

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

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