一些C/C++編譯好后,當(dāng)運(yùn)行時(shí),報(bào)錯(cuò)說(shuō)無(wú)法加載共享庫(kù),例如:
[plain] view plaincopy
./write: error while loading shared libraries: libhdfs.so.0.0.0: cannot open shared object file: No such file or directory
發(fā)生這種報(bào)錯(cuò)的原因是,編譯的程序運(yùn)行期間需要依賴某個(gè)共享庫(kù), 比如上面,write可執(zhí)行程序需要依賴一個(gè)叫“libhdfs.so”的共享庫(kù)。(動(dòng)態(tài)鏈接庫(kù)與靜態(tài)鏈接庫(kù)的區(qū)別,請(qǐng)百度相關(guān)文檔)
解決上面的問(wèn)題有兩種方式,下面兩種的任何一種都可以:
第一:在/etc/profile中添加共享庫(kù)的路徑:
[plain] view plaincopy
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64/server:/home/dcc/libhdfs
如上,添加了兩個(gè)路勁下的共享庫(kù),注意,路勁之間用冒號(hào)(“:”)隔開(kāi)。
第二:在/etc/ld.so.conf中添加路徑,然后重新加載共享庫(kù):
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
vi /etc/ld.so.conf
編輯后如下:
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
include ld.so.conf.d/*.conf
/home/dcc/libhdfs
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/
入上,分別添加了兩個(gè)路徑,每個(gè)路徑占一行。編輯完后,重新加載庫(kù):
[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
/sbin/ldconfig -v
至于兩種方法的區(qū)別,我推測(cè), 第一種是只在執(zhí)行C/C++程序時(shí)才會(huì)加載,而第二種應(yīng)該是針對(duì)整個(gè)系統(tǒng),啟動(dòng)時(shí)就加載。