一般我們?cè)贚inux下執(zhí)行某些外部程序的時(shí)候可能會(huì)提示找不到函數(shù)庫的錯(cuò)誤, 比如:
tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
原因:
1)操作系統(tǒng)里確實(shí)沒有包含該函數(shù)庫(lib.so.文件)或者函數(shù)庫版本不對(duì), 遇到這種情況那就去網(wǎng)上下載并安裝上即可.
2)已經(jīng)安裝了該函數(shù)庫, 但執(zhí)行需要調(diào)用該函數(shù)庫的程序的時(shí)候, 程序按照默認(rèn)函數(shù)庫路徑找不到該函數(shù)庫文件.
解決辦法:
- 如果函數(shù)庫文件安裝到了
/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), 進(jìn)而創(chuàng)建出動(dòng)態(tài)裝入程序(ld.so)所需的連接和緩存文件. 緩存文件默認(rèn)為/etc/ld.so.cache, 此文件保存已排好序的動(dòng)態(tài)鏈接庫名字列表.
- 如果函數(shù)庫文件安裝到了
/usr/local/lib(一般開源的函數(shù)庫會(huì)安裝到此目錄下)或其它"非/lib或/usr/lib"目錄下, 那么在執(zhí)行ldconfig命令前, 還要把新函數(shù)庫目錄加入到函數(shù)庫配置文件/etc/ld.so.conf中, 如下:
cat /etc/ld.so.conf
#include ld.so.conf.d/*.conf
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
或
echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
ldconfig -v | grep mysql
3)若沒有權(quán)限修改/etc/ld.so.conf. 那可以export一個(gè)全局變量LD_LIBRARY_PATH, 多個(gè)目錄之間用冒號(hào)分隔開.
export LD_LIBRARY_PATH=/usr/local/mysql/lib:/usr/local/ssl/lib:$LD_LIBRARY_PATH
一般來講這只是一種臨時(shí)的解決方案, 在沒有權(quán)限或臨時(shí)需要的時(shí)候使用.
4)如果程序需要的庫文件比系統(tǒng)目前存在的文件版本低,可以做一個(gè)鏈接,比如:
error while loading shared libraries: libncurses.so.4: cannot open shared
object file: No such file or directory
ls /usr/lib/libncu*
#/usr/lib/libncurses.a /usr/lib/libncurses.so.5
#/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3
可見雖然沒有l(wèi)ibncurses.so.4,但有l(wèi)ibncurses.so.5是可以向下兼容的建一個(gè)鏈接就好了
ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4
ldconfig命令參數(shù)說明:
1、 -v或--verbose:用此選項(xiàng)時(shí),ldconfig將顯示正在掃描的目錄及搜索到的動(dòng)態(tài)鏈接庫,還有它所創(chuàng)建的連接的名字.
2、-n :用此選項(xiàng)時(shí),ldconfig僅掃描命令行指定的目錄,不掃描默認(rèn)目錄(/lib,/usr/lib),也不掃描配置文件/etc/ld.so.conf所列的目錄.
3、-N :此選項(xiàng)指示ldconfig不重建緩存文件(/etc/ld.so.cache).若未用-X選項(xiàng),ldconfig照常更新文件的連接.
4、-X : 此選項(xiàng)指示ldconfig不更新文件的連接.若未用-N選項(xiàng),則緩存文件正常更新.
5、-f CONF : 此選項(xiàng)指定動(dòng)態(tài)鏈接庫的配置文件為CONF,系統(tǒng)默認(rèn)為/etc/ld.so.conf.
6、-C CACHE :此選項(xiàng)指定生成的緩存文件為CACHE,系統(tǒng)默認(rèn)的是/etc/ld.so.cache,此文件存放已排好序的可共享的動(dòng)態(tài)鏈接庫的列表.
7、-r ROOT :此選項(xiàng)改變應(yīng)用程序的根目錄為ROOT(是調(diào)用chroot函數(shù)實(shí)現(xiàn)的).選擇此項(xiàng)時(shí),系統(tǒng)默認(rèn)的配置文件/etc/ld.so.conf,實(shí)際對(duì)應(yīng)的為ROOT/etc/ld.so.conf.如用-r/usr/zzz時(shí),打開配置文件/etc/ld.so.conf時(shí),實(shí)際打開的是/usr/zzz/etc/ld.so.conf文件.用此選項(xiàng),可以大大增加動(dòng)態(tài)鏈接庫管理的靈活性.
8、-l :通常情況下,ldconfig搜索動(dòng)態(tài)鏈接庫時(shí)將自動(dòng)建立動(dòng)態(tài)鏈接庫的連接.選擇此項(xiàng)時(shí),將進(jìn)入專家模式,需要手工設(shè)置連接.一般用戶不用此項(xiàng).
9、-p或--print-cache :此選項(xiàng)指示ldconfig打印出當(dāng)前緩存文件所保存的所有函數(shù)庫的名字.
10、-c FORMAT 或--format=FORMAT :此選項(xiàng)用于指定緩存文件所使用的格式,共有三種:ld(老格式),new(新格式)和compat(兼容格式,此為默認(rèn)格式).
11、-V : 此選項(xiàng)打印出ldconfig的版本信息,而后退出.
12、- 或 --help 或--usage : 這三個(gè)選項(xiàng)作用相同,都是讓ldconfig打印出其幫助信息,而后退出.