我正在编写一个从QObject派生的类,并且想将该类导出到DLL文件中,以便其他应用程序可以使用它。但是我在这里遇到了一个神秘的问题:

代码如下所示:

mydll.h:

 #ifndef MYDLL_H
 #define MYDLL_H

 #include "mydll_global.h"
 #include <QObject>
 #include <QDebug>

 class MYDLLSHARED_EXPORT MyDll : public QObject
 {
     Q_OBJECT
  public:
     explicit MyDll(QObject * parent = 0);

     void test() const;
 };

 #endif // MYDLL_H


mydll_global.h:

 #ifndef MYDLL_GLOBAL_H
 #define MYDLL_GLOBAL_H

 #include <QtCore/qglobal.h>

 #if defined(MYDLL_LIBRARY)
 #  define MYDLLSHARED_EXPORT Q_DECL_EXPORT
 #else
 #  define MYDLLSHARED_EXPORT Q_DECL_IMPORT
 #endif

 #endif // MYDLL_GLOBAL_H


mydll.cpp:

 #include "mydll.h"

 MyDll::MyDll(QObject * parent) :
     QObject(parent)
 {
 }

 void MyDll::test() const {
     qDebug() << "Hello from dll!";
 }


dll在另一个应用程序中使用。 dll已成功编译。我已经使用此dll在应用程序的LIBS += "myDll.dll"文件中添加了.pro,并且已将myDll.dll复制到应用程序的工作目录中。

编译器报告:

 C4273: "MyDll::qt_static_metacall" : inconsistent dll linkage.
 C2491: "MyDll::staticMetaObject": definition of dllimport static data member not allowed


这是什么问题

最佳答案

您的mydll_global.h代码检查是否定义了MYDLL_LIBRARY,但是您发布的所有代码均未定义MYDLL_LIBRARY。这是在您尚未共享的文件中声明的吗?如果不是,则需要在构建项目或PCH中添加#define MYDLL_LIBRARY

09-25 17:49