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