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