具体提示如下:
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
感慨:
1、发现问题头绪,但是并没有真正思维到深度,过多的依赖搜索。2、主要还是对QtCreator动态库方面不熟悉导致的。
3、悟性啊,悟性,我并不多。