为了测试Qt应用程序(名为qtapp)的一些功能,我将Qt应用程序构建为lib / dll库。 ctor和dtor已在库中正确导出。但是,编译测试项目(名为consoleTest的Qt控制台项目)始终会运行以下链接错误:
链接: 1 GT; Bibliothek“C:\ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.lib”和Objekt C:\ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exp“werden erstellt。 1> moc_testFour.obj:错误LNK2001:Nichtaufgelöstesexternes符号“”public:static struct QMetaObject const qtapp :: staticMetaObject“(?staticMetaObject @ qtapp @@ 2UQMetaObject @@ B)”。 1> testFour.obj:错误LNK2001:Nichtaufgelöstesexternes符号“”public:static struct QMetaObject const qtapp :: staticMetaObject“(?staticMetaObject @ qtapp @@ 2UQMetaObject @@ B)”。 1> C:\ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exe:致命错误LNK1120:1nichtaufgelösteExterne
Qt应用程序非常简单:
#ifndef QTAPP_H
#define QTAPP_H
#include <QtWidgets/QMainWindow>
#include "ui_qtapp.h"
class __declspec(dllexport) qtapp : public QMainWindow
{
Q_OBJECT
public:
qtapp(QWidget* parent = 0);
~qtapp();
private:
Ui::qtappClass ui;
};
#endif // QTAPP_H
实现:
#include "qtapp.h"
__declspec(dllexport) qtapp::qtapp(QWidget* parent)
: QMainWindow(parent)
{
ui.setupUi(this);
}
__declspec(dllexport) qtapp::~qtapp()
{
}
如果我只是在测试项目中包含#include "qtapp.h"
,则编译器会产生上述错误。
我的问题:
我的编译器是visual studio 2013,qt的版本是5.4.2
答案 0 :(得分:1)
这实际上是一个独立于Qt的问题。将应用程序与库链接时,您需要__declspec(dllimport)
而不是__declspec(dllexport)
。
要实现这一点,通常会使用在链接库与将应用程序链接到库时更改的定义。 Microsoft在"Importing into an Application Using __declspec(dllimport)"上有一个帮助页面。
Qt documentation提供另一个。 Qt可以提供帮助的一件事是用跨平台Q_DECL_IMPORT替换__declspec
。