1. 程式人生 > >linux下執行動態庫問題 cannot open shared object file: No such file or directory

linux下執行動態庫問題 cannot open shared object file: No such file or directory

如果動態庫不在同一級目錄下,則需要將以上檔案的目錄載入到動態庫搜尋路徑中,設定的方式有以下幾種:
一. 將動態庫路徑加入到LD_LIBRARY_PATH環境變數
 1.在終端輸入:export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX:/XXX/XXX.so      只在當前終端起作用
 2. 修改~/.bashrc或~/.bash_profile,最後一行新增 export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX:/XXX/xxx.so,儲存之後,使用source  .bashrc執行該檔案 ,當前使用者生效
 3. 修改/etc/profile,新增內容如第2條,同樣儲存之後使用source執行該檔案  所有使用者生效

 

二.在/etc/ld.so.conf檔案結尾新增動態庫的路徑,如/XXX和/XXX/xxx/,儲存之後,然後執行ldconfig

       

[email protected]:~# cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

/usr/lib/apache2
[email protected]:~# echo /usr/local/lib >> etc/ld.so.conf

[email protected]:~# ldconfig


 

三.可以將各依賴庫放入到/lib64或usr/lib64下

 

四.可以在Makefile中使用-Wl,-rpath來指定動態路徑,但是需要將網路sdk各個動態庫都用 –l方式顯示載入進來
 比如:-Wl,-rpath=/XXX:/XXX/HCNetSDKCom -lhcnetsdk  -lhpr –lHCCore –lHCCoreDevCfg –lStreamTransClient –lSystemTransform –lHCPreview –lHCAlarm –lHCGeneralCfgMgr –lHCIndustry –lHCPlayBack –lHCVoiceTalk –lanalyzedata -lHCDisplay


推薦使用一或二的方式,但要注意優先使用的是同級目錄下的庫檔案。

 

在編譯時指定標頭檔案和庫路徑的方法

$(CXX) -L$(LIB) -I$(INC) ${SRC}/*.cpp -o $(EXE) $(LIBS)


-I 指定標頭檔案路徑  -L指定庫路徑  注意中間不加空格