Um einige Funktionen einer Qt-Anwendung (namens qtapp) zu testen, erstelle ich die Qt-Anwendung als lib/dll-Bibliothek. Der ctor und dtor wurden korrekt in die Bibliothek exportiert. das Testprojekt (ein Qt Konsole Projekt mit dem Namen consoleTest) läuft auf den folgenden Link Fehler wird immer jedoch Kompilieren:Wie referenziere ich eine Qt-Anwendung?
-Link: 1> Bibliothek „C: \ Benutzer \ gmbh \ test \ x64 \ Debug \ consoleTest. lib "und Objekt C: \ Benutzer \ gmbh \ test \ x64 \ Debug \ consoleTest.exp" wird erstellt. 1> moc_testFour.obj: Fehler LNK2001: Nicht aufgelötes externes Symbol "" public: statische Struktur QMetaObject const qtapp :: staticMetaObject "(? staticMetaObject @ qtapp @@ 2UQMetaObject @@ B)". 1> testFour.obj: Fehler LNK2001: Nicht aufgelöstes externes Symbol "" public: statische Struktur QMetaObject const qtapp :: staticMetaObject "(? staticMetaObject @ qtapp @@ 2UQMetaObject @@ B) ". 1> C: \ Benutzer \ gmbh \ test \ x64 \ Debug \ consoleTest.exe: schwerer Fehler LN K1120: 1 nicht aufgelöste Externe
Die Qt-Anwendung ist ganz einfach:
#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
Umsetzung:
#include "qtapp.h"
__declspec(dllexport) qtapp::qtapp(QWidget* parent)
: QMainWindow(parent)
{
ui.setupUi(this);
}
__declspec(dllexport) qtapp::~qtapp()
{
}
Wenn ich einfach #include "qtapp.h"
im Testprojekt enthalten, liefert der Compiler die oben Error.
Meine Fragen:
- Was sind die Ursachen für die Fehler?
- Wie kann ich eine Qt Anwendung korrekt als lib bereitstellen?
Mein Compiler ist Visual Studio 2013, qt die Version von 5.4.2
Ich denke, du verstehst meinen Zweck nicht. Das obige qtapp ist eigentlich ein Dummy-Projekt. Mein letztes Ziel ist es, einige Funktionen in meiner QT-Anwendung zu testen. Bei dieser Rate sollte die Qt-Anwendung zuerst ** in eine DLL exportiert werden, die später in meinem Testprojekt ** importiert wird ** und die gewünschten DLL-Funktionen aufgerufen und verifiziert werden. – euroswenwickler
Mit Ihrem Beispielcode, wenn Sie 'qtapp.h' in Ihr Testprojekt einfügen, wird ein falsches' __declspec (dllexport) 'anstelle von' __declspec (dllimport) 'angezeigt. Ich kann nicht sagen, was sonst ohne ein vollständigeres Beispiel falsch wäre;) – E4z9