簡體   English   中英

Windows – Qt創建並使用自制的靜態庫

[英]windows – Qt create and use self-made static library

有幾個問題似乎很相似,但沒有什么真正幫助我。 我想在項目內創建一個靜態庫,並在同一項目中使用它,但是發生鏈接錯誤。

Qt票證QTBUG-45706 https://bugreports.qt.io/browse/QTBUG-45706上附有一個很好的例子,非常符合我的條件。 簡單來說,我們有一個應用程序,該應用程序應使用一些自制的庫。 只需修改一些內容即可查看我的問題。

應用-> main.cpp

#include <QCoreApplication>
#include <lib.h>

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);

  Lib l1;

  return a.exec();
}

lib.pro

CONFIG += staticlib

如果現在編譯項目,將會看到以下錯誤

main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl Lib2::Lib2(void)" (__imp_??0Lib2@@QEAA@XZ) referenced in function main

在mscv2013中使用基於Qt 5.6.1,qmake的Qt Creator 4.0.3

使它起作用需要什么?

澄清:

項目結構如下:

subdirs_test.pro (subdir project)
\- app (app project, includes lib and lib2)
\-- app.pro
\-- main.cpp
\- lib (static library)
\-- lib.pro
\-- lib.h
\-- lib_global.h
\-- lib.cpp
\- lib2 (static library)
\-- lib2.pro
\-- lib2.h
\-- lib2_global.h
\-- lib2.cpp

“ app”項目應使用lib和lib2中的類,它們是靜態庫。

根據建議,使用“添加庫...”不會改變任何內容。 就我而言,將生成此代碼。

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../lib/release/ -llib
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../lib/debug/ -llib
else:unix: LIBS += -L$$OUT_PWD/../lib/ -llib

INCLUDEPATH += $$PWD/../lib
DEPENDPATH += $$PWD/../lib

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/release/liblib.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/debug/liblib.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/release/lib.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/debug/lib.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../lib/liblib.a

您可以嘗試執行以下步驟:

  1. 項目上的右鍵
  2. 新增圖書館
  3. 選擇類型(外部或其他)
  4. 將標志設置為靜態,如這張圖片

您可以使用QtCreators Subdirs項目。 這是詳細的逐步說明,說明如何使用QtCreator來實現。

  • 從“ New Project向導菜單中選擇“ Subdirs Project ”。

子目錄項目

  • 通過使用鼠標右鍵單擊已創建的Subdirs項目並選擇New Subproject...來添加Subrojects。

新子項目

  • 通過遵循向導,您應該有一個GUI或控制台子項目和一個庫子項目。 然后單擊您要用鼠標右鍵鏈接庫子項目的子項目,然后選擇Add Library...

添加圖書館

  • 在對話框中選擇Internal library ,系統將提示您選擇要添加的庫。

內部圖書館

  • 確保您的庫子項目包含在gui / console子項目之前,因為subdir項目將無法生成。

    模板=子目錄

    SUBDIRS + = \\ LibProject \\ CoreProject

暫無
暫無

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

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