您好,登錄后才能下訂單哦!
動(dòng)態(tài)庫即共享庫,說到linux找不到動(dòng)態(tài)庫的問題,首先要了解動(dòng)態(tài)庫的特點(diǎn):
● 動(dòng)態(tài)庫把對(duì)一些庫函數(shù)的鏈接載入推遲到程序運(yùn)行的時(shí)期。
● 可以實(shí)現(xiàn)進(jìn)程之間的資源共享。(因此動(dòng)態(tài)庫也稱為共享庫)
● 將一些程序升級(jí)變得簡(jiǎn)單。
● 甚至可以真正做到鏈接載入完全由程序員在程序代碼中控制(顯示調(diào)用)。
由上述中的第1點(diǎn)可知,動(dòng)態(tài)庫并不是像靜態(tài)庫那樣將庫文件以二進(jìn)制形式打包到程序中,而是在程序運(yùn)行到需要調(diào)用對(duì)應(yīng)庫函數(shù)這個(gè)時(shí)機(jī)的時(shí)候動(dòng)態(tài)加載動(dòng)態(tài)庫,這時(shí)候系統(tǒng)只知道動(dòng)態(tài)庫的名字,而不知道絕對(duì)路徑,此時(shí)就需要系統(tǒng)動(dòng)態(tài)載入器(dynamic linker/loader);對(duì)于elf的可執(zhí)行程序,是由ld-linux.so來完成的,它先后搜索elf文件的DT_RPATH段(不可控) =》 環(huán)境變量LD_LIBRARY_PATH =》 /etc/ld.so.cache文件列表 =》 /lib/和/usr/lib 目錄找到庫文件后載入內(nèi)存。
那么我們需要做的就是將動(dòng)態(tài)庫所在目錄的絕對(duì)路徑加到動(dòng)態(tài)載入器搜索序的任一次序中,下面說具體實(shí)現(xiàn)方法:
方法1:拷貝自己制作的共享庫到/lib或/usr/lib,不推薦
方法2:將動(dòng)態(tài)庫所在目錄的絕對(duì)路徑添加到系統(tǒng)環(huán)境變量中
2.1、將動(dòng)態(tài)庫所在目錄的絕對(duì)路徑臨時(shí)添加到環(huán)境變量中(隨終端關(guān)閉失效)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chiliast/homework/day03/shared/lib
2.2、將動(dòng)態(tài)庫所在目錄的絕對(duì)路徑設(shè)置到~/.bashrc或/etc/profile中(永久生效)
用戶級(jí)別:追加庫路徑到~/.bashrc文件尾
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chiliast/homework/day03/shared/lib
source ~/.bashrc 或 . ~/.bashrc使配置生效
系統(tǒng)級(jí)別:追加庫路徑到/etc/profile文件尾
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/chiliast/homework/day03/shared/lib
source /etc/profile 或 ./etc/profile使配置生效
方法3:將動(dòng)態(tài)庫所在目錄的絕對(duì)路徑添加到 /etc/ld.so.cache文件中(2步實(shí)現(xiàn))
編輯/etc/ld.so.conf文件,加入庫文件所在目錄的路徑
運(yùn)行l(wèi)dconfig (需要super user權(quán)限),該命令會(huì)重建/etc/ld.so.cache文件
以上就是linux動(dòng)態(tài)庫找不到怎么辦的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。