轉自: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時,提示錯誤:
- /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文件。
