Qt 5.3.1 - 静态构建导致链接器错误

时间:2014-07-23 05:50:05

标签: c++ qt qt5 linker-errors

我刚从Qt 5.3.1为Windows x86和MSVC 2013构建静态库。第二步显然是使用这些库的静态链接应用程序。所以我创建了一个小应用程序(只是带有一些控件的MainWindow,用于测试目的)。这是我的* .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:\statics\lib\ -lQt5Core \
        -LC:\statics\lib\ -lQt5Gui \
        -LC:\statics\lib\ -lQt5Widgets \
        -LC:\statics\lib\ -lqtmain \
        -LC:\statics\lib\ -lQt5PlatformSupport \

INCLUDEPATH += C:\statics\include

呀。这是我从使用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),但错误仍然存​​在。

感谢您的回答:)

2 个答案:

答案 0 :(得分:0)

QT += core gui

LIBS += -LC:\statics\lib\ -lQt5Core \
    -LC:\statics\lib\ -lQt5Gui \

您正在两次加载两个Qt库:默认版本和自定义版本。默认情况下,QT包含core和gui库...您必须手动删除它们:

QT -= core gui

答案 1 :(得分:0)

只需从项目文件中删除LIBSINCLUDEPATH,然后在项目文件的静态构建中运行qmake即可创建makefile。如果这样做无法帮助您检查PATH