windows - Qt创建并使用自制的静态库

时间:2017-07-14 10:04:45

标签: c++ qt static-libraries

有几个问题看似相似,但没有什么能真正帮助我。我想在项目中创建一个静态库并在同一个项目中使用它,但会发生链接错误。

Qt Ticket QTBUG-45706 https://bugreports.qt.io/browse/QTBUG-45706附有一个很好的例子,它符合我的条件。在一个简单的解释中,我们有一个应该使用一些自制库的应用程序。只是修改一些事情来看我的问题。

app - > 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

使用Qt Creator 4.0.3基于Qt 5.6.1,qmake使用mscv2013

需要什么来实现这一目标?

澄清:

项目结构如下:

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

2 个答案:

答案 0 :(得分:1)

您可以尝试执行后续步骤:

  1. 项目上的右键
  2. 添加库
  3. 选择类型(外部或其他)
  4. 在静态上设置标志,例如picture

答案 1 :(得分:1)

您可以使用QtCreators Subdirs项目。这里有详细的逐步说明如何使用QtCreator实现这一目标。

  • Subdirs Project向导菜单中选择New Project

Subdirs Project

  • 通过单击右侧创建的Subdirs项目添加子项目 鼠标按钮并选择New Subproject...

New Subproject

  • 通过跟随向导,你应该有一个GUI或控制台子项目和 图书馆子项目。然后单击要链接的子项目 您的库子项目用鼠标右键选择Add Library...

Add Library

  • 在对话框中选择Internal library,系统会提示您 选择要添加的库。

Internal library

  • 确保您的库子项目包含在gui / console之前 subproject as subdir project将无法构建。

    TEMPLATE = subdirs

    SUBDIRS + = \     LibProject \     CoreProject