我刚刚用MSVC 2013从Windows x86的Qt 5.3.1构建了静态库。第二步显然是使用这些库的静态链接应用程序。因此,我创建了一个小应用程序(只是一个带有一些控件的主窗口,用于测试目的)。这是我的*.pro文件:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = projectname
TEMPLATE = app
CONFIG += static
SOURCES += main.cpp
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
LIBS += -LC:staticslib -lQt5Core
-LC:staticslib -lQt5Gui
-LC:staticslib -lQt5Widgets
-LC:staticslib -lqtmain
-LC:staticslib -lQt5PlatformSupport
INCLUDEPATH += C:staticsinclude
是的。这是我从几个教程/我的记忆中得到的,当我使用5.1时。但是当编译时,我得到这些错误:
Qt5Core.lib(Qt5Core.dll):-1: error: LNK2005: "public: __thiscall QString::~QString(void)" (??1QString@@QAE@XZ) allready defined in mainwindow.obj.
mainwindow.obj:-1: error: LNK2019: Unresolved extern symbol ""public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)" in Funktion ""public: __thiscall QString::QString(void)" (??0QString@@QAE@XZ)".
moc_mainwindow.obj:-1: error: LNK2001: Unresolved extern symbol ""public: static struct QMetaObject const QMainWindow::staticMetaObject" (?staticMetaObject@QMainWindow@@2UQMetaObject@@B)".
有人知道如何处理这些错误吗?我必须链接到一些其他库没有提到上面,或包括一些文件?我在谷歌上搜索了这个话题,发现很多人都遇到了同样的问题,但他们大多使用旧版本的Qt oder VS.我也试图将项目导出到Visual Studio(从Qt Creator工作),但错误仍然存在。
谢谢你的回答
QT += core gui
LIBS += -LC:staticslib -lQt5Core
-LC:staticslib -lQt5Gui
你加载两个Qt库两次:默认和自定义版本。默认情况下,QT包含核心库和gui库…必须手动删除:
QT -= core gui
从项目文件中删除LIBS
, INCLUDEPATH
,并在项目文件上运行静态构建中的qmake来创建makefile。如果这没有帮助,检查你的PATH