爲了測試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