Qt下的動態庫的引用

2021-08-03 17:31:57 字數 1073 閱讀 2964

問題描述:

第一步,開發乙個動態庫專案,生成如下檔案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...