基于QWidget类的动态库在4.8.1隐式调用时出现staticMetaObject' of dllimport'd class的解决办法

具体提示如下:

App\debug\moc_scopewidget.cpp:56: 错误:definition of static data member 'ScopeWidget::staticMetaObjectExtraData' of dllimport'd class

同时还有一些警告:

App\debug\moc_scopewidget.cpp:56: 警告:'ScopeWidget::staticMetaObjectExtraData' redeclared without dllimport attribute after being referenced with dll linkage

不仅staticMetaObjectExtraData有这样的警告信息,其它的静态函数也还有很多。

思考:

按理说Debug这地方不需要moc_scopewidget.cpp文件的,但是在工程中增加对应的scopewidget.h头文件之后,自动生成了此文件,并导致错误。


过程:

本来对QtCreator就不太了解,此时更是逃避不了,大量google之后,终于找到一篇好贴:

http://www.qtforum.org/article/26708/shared-library-compilation-error.html?s=648c17887f3ae72775fc9386fc3c403e37ca7334#post92829

大致意思就是SDK4.7.4中没有此问题,但是4.8.1中存在此问题。

解决办法简单也很给力:

HEADERS += mainwindow.h libs/myclass/myclass.hTryHEADERS += mainwindow.hHEADERS are processed by moc, but you do not need it this time. http://doc.trolltech.com/4.4/qmake-varia…ce.html#headers#include "libs/myclass/myclass.h" // only in unit where it is used.

按照说明,将工程树中的ScopeWidget.h从工程中移除,然后重新编译,竟然好了。

结论:

pro文件中区块

HEADERS += mainwindow.h \

                ../ScopeWidget/ScopeWidget.h
改为如下即可(删除第二行):

HEADERS += mainwindow.h

这样4.8.1就不会在主程序的debug文件夹下自动生成moc_scopeWidget.cpp文件了,也就没有如上错误了。

感慨:

1、发现问题头绪,但是并没有真正思维到深度,过多的依赖搜索。

2、主要还是对QtCreator动态库方面不熟悉导致的。

3、悟性啊,悟性,我并不多。



你可能感兴趣的:(QT编程)