天天看點

linux 加載目前目錄的動态庫

linux的excutable在執行的時候預設是先搜尋/lib和/usr/lib這兩個目錄,然後按照ld.so.conf裡面的配置搜尋絕對路徑,

linux預設是不會在目前目錄搜尋動态庫的。windows加載動态庫的時候,預設是首先加載本地目錄下的動态庫,然後再搜尋windows/system和windows/system32目錄。

windows的動态庫搜尋順序,雖然有可能會造成潛在的混亂,但是對于開發和測試無疑是比較友善的,尤其是debug和release版本的動态庫需要經常切換進行測試的時候。

linux的動态庫搜尋順序雖然可以說成是比較嚴謹,但是相對來說也比較呆闆,有時候會造成不便。

其實,linux也可以支援“加載目前目錄的動态庫”。隻要設定合适的環境變量LD_LIBRARY_PATH就可以了。設定方法有以下三種:

1、臨時修改,隻在 目前terminal有效

在terminal中執行:export LD_LIBRARY_PATH=./

注意:這裡不一定有效,怎麼辦,指定全路徑 export LD_LIBRARY_PATH=/home/xxx/xxx/xxx

2、讓目前帳号以後都優先加載目前目錄的動态庫

修改~/.bash_profile在檔案末尾加上兩行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

注意:這裡不一定有效,怎麼辦,指定全路徑 export LD_LIBRARY_PATH=/home/xxx/xxx/xxx

3、讓所有帳号從此都優先加載目前目錄的動态庫

修改/etc/profile在檔案末尾加上兩行: LD_LIBRARY_PATH=./ 和 export LD_LIBRARY_PATH

注意:這裡不一定有效,怎麼辦,指定全路徑 export LD_LIBRARY_PATH=/home/xxx/xxx/xxx

PS:修改ld.so.conf不能達到我們的目的,因為ld.so.conf隻支援絕對路徑。

注意:這裡不一定有效,怎麼辦,指定全路徑 export LD_LIBRARY_PATH=/home/xxx/xxx/xxx

如果還是加載不了,請檢視相關so 屬性,

設定屬于

sudo chmod 777 -R /*

如果還是加載不了,再次檢視相關so依賴

linux下檢視動态連結庫依賴關系的指令

x86:

ldd    *.so

arm:

arm-linux-readelf    -d    *.so