linux動態函式庫找不到怎麼辦?
解決linux找不到動態函式庫的問題
動態函式庫即共享函式庫,說到linux找不到動態函式庫的問題,首先要了解動態函式庫的特點:
推薦:《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/libsource /etc/profile 或./etc/profile使設定生效方法3:將動態庫所在目錄的絕對路徑新增至/ etc/ld.so.cache檔案中(2步驟實作)編輯/etc/ld.so.conf文件,加入庫檔案所在目錄的路徑執行ldconfig (需要super user權限),該指令會重建/etc/ld.so.cache檔
以上是linux動態庫找不到怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!