基于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、悟性啊,悟性,我并不多。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值