讓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只支援絕對路徑。 Tips: 用 ldd
===================================================
權威資料參考:
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 環境變數。