簡體   English   中英

加載自定義DLL +自定義應用失敗,並顯示以下錯誤:加載共享庫時出錯

[英]Loading custom dll + custom app fails with: error while loading shared libraries

我的環境是:

  • Debian Linux 8 x86
  • / opt中安裝了Qt 5.3.1(以避免與安裝的Qt系統沖突)
  • QtCreator 3.4.2
  • gcc 4.9.2

在創建我的應用程序時,我決定將某些功能分成幾個部分。 因此,我創建了帶有2個文件夾/子項目( UIlogics )的子文件夾項目( main ),如下所示:

  • 主要
    • UI
    • 邏輯

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鏈接

現在,當我使用QtCreatorUI項目運行可執行文件時, 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庫。

因此,至少有兩種解決方案:

  1. 設置LD_LIBRARY_PATH以包括當前文件夾(或某些指定的文件夾)

導出LD_LIBRARY_PATH =。

  1. 設置Rpath *.pro文件中,添加以下行:

QMAKE_LFLAGS + = -Wl-rpath。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM