1. 程式人生 > >linux載入當前目錄的動態庫

linux載入當前目錄的動態庫

linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕對路徑,linux預設是不會在當前目錄搜尋動態庫的。windows載入動態庫的時候,預設是首先載入本地目錄下的動態庫,然後再搜尋windows/system和windows/system32目錄。
windows的動態庫搜尋順序,雖然有可能會造成潛在的混亂,但是對於開發和測試無疑是比較方便的,尤其是debug和release版本的動態庫需要經常切換進行測試的時候。linux的動態庫搜尋順序雖然可以說成是比較嚴謹,但是相對來說也比較呆板,有時候會造成不便。

其實,linux也可以支援“載入當前目錄的動態庫”。只要設定合適的環境變數LD_LIBRARY_PATH就可以了。設定方法有以下三種:

1、臨時修改,log out之後就失效
在terminal中執行:export LD_LIBRARY_PATH=./

2、讓當前帳號以後都優先載入當前目錄的動態庫
修改~/.bash_profile在檔案末尾加上兩行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

3、讓所有帳號從此都優先載入當前目錄的動態庫
修改/etc/profile在檔案末尾加上兩行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

PS:修改ld.so.conf不能達到我們的目的,因為ld.so.conf只支援絕對路徑。
=======================================================
權威資料參考:


LD_LIBRARY_PATH 環境變數 [UNIX]

--------------------------------------------------------------------------------

語法
LD_LIBRARY_PATH=installation_path/lib

說明
LD_LIBRARY_PATH 環境變數僅在 UNIX 上使用。它由安裝程式修改為包括 Adaptive Server Anywhere 庫所在的目錄。

這些庫位於安裝目錄的 lib 子目錄中(例如,/opt/SYBSasa9/lib)。

在 Mac OS X 上使用的是 DYLD_LIBRARY_PATH 環境變數,而在 AIX 上使用的則是 LIBPATH 環境變數。