問題描述:
第一步,開發乙個動態庫專案,生成如下檔案libtestlibrary.so、libtestlibrary.so.1、libtestlibrary.so.1.0、libtestlibrary.so.1.0.0,其中libtestlibrary.so、libtestlibrary.so.1、libtestlibrary.so.1.0為鏈結檔案,libtestlibrary.so.1.0.0為庫檔案;
第二步,開發乙個使用動態庫的專案testmylibrary,在qtcreater下可以執行,而單獨執行可執行程式,不能執行,提示沒有找到動態庫檔案。
問題原因:
程式執行時需要載入動態庫檔案,而可執行程式根據系統指定的搜尋目錄沒有發現動態庫檔案;
解決辦法:
1、使用ldd命令,檢視可執行程式的動態庫依賴:
ldd ./testmylibrary
看看執行程式都找不到哪些依賴檔案;
將ldd列出的找不到的檔案和真實的庫檔案拷貝到目錄 /usr/lib下;
在本例子中需要拷貝的檔案是libtestlibrary.so.1、libtestlibrary.so.1.0.0;
重新執行可執行檔案,正常;
理由:/usr/lib 為系統預設搜尋目錄;
2、修改系統動態庫配置檔案(以下命令需要最高許可權,許可權不足**sudo)
vi /etc/ld.so.conf
在現有的行後面新增新行,填上自己的動態庫檔案所在的目錄,儲存退出;
輸入命令 ldconfig
ldconfig為動態庫載入到快取記憶體的命令,修改後不更新不起作用;
重新執行可執行檔案,正常;
理由:ld.so.conf 裡面是想要讀入快取記憶體當中的動態庫函式庫所在的目錄;
3、在/etc/ld.si.conf.d/目錄下建立自己的動態庫配置檔案;
vi mylib.conf
將動態庫檔案所在的目錄新增上,儲存退出;
輸入命令 ldconfig
重新執行可執行檔案,正常;
理由:ld.so.conf 的第一行是 include ld.so.conf.d/*.conf 包含了該目錄下的所有配置檔案;
linux系統下Qt動態庫鏈結
在a環境下編譯的qt程式,放到b環境下未編譯直接執行後出現了 libqt5network.so.5 version qt 5 not found libqt5gui.so.5 version qt 5 not found libqt5core.so.5 version qt 5 not found ...
QT動態連線庫的編寫
1.qt動態鏈結庫的編寫流程 1.1 首先在qt creator中建立乙個動態連線庫matrix,新增類名,生成乙個類 matrix.h和matrix.cpp 和乙個matrix global.h的檔案,在matrix global.h中可看到使用的匯出巨集,為matrixshared export...
linux動態庫引用
linux環境中動態庫的搜尋路徑預設是 usr lib或 lib,在程式執行時需要某個動態庫,才會去預設路徑下尋找動態庫。當我們自己編譯的動態庫不在預設路徑下,就會產生如下的報錯 test.out error while loading shared libraries libtest1.so ca...