[英]Loading custom dll + custom app fails with: error while loading shared libraries
我的環境是:
在創建我的應用程序時,我決定將某些功能分成幾個部分。 因此,我創建了帶有2個文件夾/子項目( UI
和logics
)的子文件夾項目( main
),如下所示:
當UI
是默認的Qt Widget Application(main.cpp和window)時。 logics
是一個非常簡單的共享庫,帶有空類Logics
(空構造函數,僅此而已)。 我已經添加
DESTDIR = $$PWD/../UI
到logics.pro
因此最終的logics.so
將在UI
文件夾中創建。 到我添加的UI.pro
LIBS += -L $$PWD -llogics
將UI
可執行文件與logics.so
鏈接
現在,當我使用QtCreator
從UI
項目運行可執行文件時, QtCreator
奇怪的錯誤:
UI:加載共享庫時出錯:liblogics.so.1:無法打開共享庫文件:沒有這樣的文件或目錄
僅當從QObject
派生的Logics
類時才存在該錯誤。 看起來是logics.so
找不到Qt
庫。 但是當我查詢其依賴項時,我看不到任何問題:
ldd logics.so
linux-gate.so.1 (0xb770d000) libQt5Core.so.5 => /opt/Qt5.3.1/5.3/gcc/lib/libQt5Core.so.5 ...
如果Logics
類獨立於Qt
我的意思是,當我刪除QObject
,錯誤消失了。
但是我不能僅將它與系統安裝的Qt庫沖突而將此Qt庫路徑添加到LD_LIBRARY_PATH
。
所以我的問題-如何使用自定義鏈接的共享庫從QtCreator運行我的主UI
項目?
好的,搜索Internet之后,我發現(令我非常驚訝的是)Linux可執行文件默認情況下不在庫搜索路徑中包含當前文件夾。 盡管可執行文件和庫位於某些文件夾中,但可執行文件將無法加載* .so庫。
因此,至少有兩種解決方案:
LD_LIBRARY_PATH
以包括當前文件夾(或某些指定的文件夾) 導出LD_LIBRARY_PATH =。
*.pro
文件中,添加以下行: QMAKE_LFLAGS + = -Wl-rpath。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.