執(zhí)行可執(zhí)行程序時(shí)遇到error while loading shared libraries錯(cuò)誤解決
執(zhí)行 ./provider -i test.conf 編譯引用了第三方庫zookeeper_mt.so的代碼后,執(zhí)行出現(xiàn)了以下錯(cuò)誤
error while loading shared libraries: libzookeeper_mt.so.2: cannot open shared object file: No such file or directory
這就是依賴的動(dòng)態(tài)庫找不到路徑導(dǎo)致的。
示例是我處理的過程如下,最后成功執(zhí)行:
[root@localhost ~]# ./provider -i test.conf
error while loading shared libraries: libzookeeper_mt.so.2
cannot open shared object file: No such file or directory
[root@localhost ~]# find / -name libzookeeper_mt.so.2
find: ‘/run/user/1000/gvfs’: Permission denied
/usr/local/lib/libzookeeper_mt.so.2
/opt/zookeeper-3.4.10/src/c/.libs/libzookeeper_mt.so.2
[root@localhost ~]# ldconfig
[root@localhost ~]# ./provider -i test.conf
error while loading shared libraries: libzookeeper_mt.so.2
cannot open shared object file: No such file or directory
[root@localhost ~]# echo "/usr/local/lib" >> /etc/ld.so.conf
[root@localhost ~]# ldconfig
[root@localhost ~]# ./provider -i test.conf
解決方法有3種:
-
如果共享庫文件安裝到了/lib或/usr/lib目錄下, 執(zhí)行一下
ldconfig
命令。
ldconfig命令的用途,主要是在默認(rèn)搜尋目錄(/lib和/usr/lib)以及動(dòng)態(tài)庫配置文件/etc/ld.so.conf內(nèi)所列的目錄下,搜索出可共享的動(dòng)態(tài)鏈接庫(格式如lib*.so*),然后創(chuàng)建出動(dòng)態(tài)裝入程序(ld.so)所需的連接和緩存文件,緩存文件默認(rèn)為/etc/ld.so.cache,此文件保存已排好序的動(dòng)態(tài)鏈接庫名字列表。 -
如果共享庫文件安裝到了/usr/local/lib(很多開源的共享庫都會安裝到該目錄下)或其它"非/lib或/usr/lib"目錄下,在執(zhí)行l(wèi)dconfig命令前,需要把新共享庫目錄加入到共享庫配置文件/etc/ld.so.conf中,如下:文章來源:http://www.zghlxwxcb.cn/news/detail-700504.html
[root@localhost ~]#cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
[root@localhost ~]#echo "/usr/local/lib" >> /etc/ld.so.conf
[root@localhost ~]#ldconfig
- 如果共享庫文件安裝到了其它"非/lib或/usr/lib" 目錄下,但是又不想在/etc/ld.so.conf中加路徑(或者是沒有權(quán)限加路徑)。那可以export一個(gè)全局變量LD_LIBRARY_PATH,然后運(yùn)行程序時(shí)會去目錄中找共享庫。此方法在當(dāng)前用戶下配置環(huán)境變量只是臨時(shí)生效,如果服務(wù)器不重啟那可能一直有效。萬一重啟了,就失效了,相當(dāng)于一次性的設(shè)置。
LD_LIBRARY_PATH的意思是告訴loader在哪些目錄中可以找到共享庫。可以設(shè)置多個(gè)搜索目錄,這些目錄之間用冒號分隔開。
比如安裝了一個(gè)mysql到/usr/local/mysql目錄下,其中有一大堆庫文件在/usr/local/mysql/lib下面,則可以在.bashrc或.bash_profile或shell里加入以下語句即可:
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
采用第3種方法解決一下:文章來源地址http://www.zghlxwxcb.cn/news/detail-700504.html
[root@localhost ~]#export LD_LIBRARY_PATH=/home/work/ABCDEFG/lib/:$LD_LIBRARY_PATH
到了這里,關(guān)于執(zhí)行可執(zhí)行程序時(shí)遇到error while loading shared libraries錯(cuò)誤解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!