为了测试Qt应用程序(名为qtapp)的某些功能,我将Qt应用程序构建为lib/dll库。 ctor和dtor已经正确导出到库中。然而编译测试项目(名为consoleTest Qt的控制台项目)一直运行到以下链接错误:如何引用Qt应用程序?
链接: 1> Bibliothek“C:\用户\有限公司\测试\ 64 \调试\ consoleTest。 lib“和Objekt C:\ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exp”werden erstellt。 1> moc_testFour.obj:error LNK2001:Nichtaufgelöstesexternes符号“”public:static struct QMetaObject const qtapp :: staticMetaObject “?staticMetaObject @quata @@ 2UQMetaObject”(?staticMetaObject @ qtapp @@ 2UQMetaObject @@ B)“ 1> testFour.obj:error LNK2001:Nichtaufgelöstesexternes Symbol”“public:static struct QMetaObject const qtapp :: staticMetaObject”(?staticMetaObject @ qtapp @@ 2UQMetaObject @@ B)“。 1> C:\ Users \ gmbh \ test \ x64 \ Debug \ consoleTest.exe:致命错误LN K1120:1个nichtaufgelö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"
,编译器产生上述错误。
我的问题:
- 什么是错误的原因是什么?
- 如何在lib中正确部署Qt 应用程序?
我的编译器的Visual Studio 2013,Qt拥有的5.4.2
我想,你不明白我的目的。上面的qtapp实际上是一个虚拟项目。我的最终目标是在我的qt应用程序中测试一些函数。以这样的速度,Qt应用程序应该首先导出**到一个dll中,后来在我的测试项目中将被导入**,并且所需的dll函数将被调用和验证。 – euroswenwickler
用你的例子代码,当你在你的测试项目中包含'qtapp.h'时,它会看到一个错误的'__declspec(dllexport)'而不是'__declspec(dllimport)'。没有一个更完整的例子,我不知道还有什么可能是错的;) – E4z9