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指定庫路徑 注意中間不加空格