definition of static data member '*::staticMetaObjectExtraData' of dllimport

vip2006_007 2012-04-27 12:22:37
用Qt编写了一个dll;写了几个类,这些类都继承自QObject并使用了Q_OBJECT宏,大概跟下面的类一样:
class Q_DECL_EXPORT A:public QObject
{
Q_OBJECT
public:
A();
}
编译后生成libx.a跟x.dll
然后在另一个项目里使用这个x.dll(隐式调用)
编写了一个新类继承自A
class B:public A
{
Q_OBJECT
public:
B();
}
编译出现了这样的错误 error: definition of static data member 'A::staticMetaObjectExtraData' of dllimport'd class
蛋痛的是,使用mingw 4.7.4不存在这样的错误,报的是“multiple definition of ‘**metacall(*)’”,不过据称这是编译器错误,不是程序错误,换成mingw4.8.1就出现了上面definition of static data member 'A::staticMetaObjectExtraData' of dllimport'd class的错误。。。。。这究竟是怎么搞的啊??????
都被弄晕了。。。。
...全文
897 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vip2006_007 2013-05-08
  • 打赏
  • 举报
回复
引用 2 楼 noodle123 的回复:
突然发现你的问题是 2012-04-27提的,到现在已经过去快一年了,呵,呵呵。
我都忘了有这贴了
noodle123 2013-01-10
  • 打赏
  • 举报
回复
突然发现你的问题是 2012-04-27提的,到现在已经过去快一年了,呵,呵呵。
noodle123 2013-01-10
  • 打赏
  • 举报
回复 1
确实是编译器的问题: 隐式调用的时候我们一般在工程树中将需要的动态库头文件添加到工程中: HEADERS += mainwindow.h \ ScopeWidget.h 这样导致ScopeWidget.h的全局引用,由于从QWidget继承,所以编译的时候会生成moc_ScopeWidget.cpp文件,导致如上错误。 解决办法是将ScopeWidget.h从工程树中移除,只在用到的地方引用。比如: 工程中需要变为: HEADERS += mainwindow.h 然后在ui_mainwindow.h中使用 #include "../ScopeWidget/ScopeWidget.h" 这样就可以了。 ScopeWidget *scopeWidget; scopeWidget = new ScopeWidget(groupBox_4); scopeWidget->setObjectName(QString::fromUtf8("scopeWidget")); 以上答案得益于如下链接: http://www.qtforum.org/article/26708/shared-library-compilation-error.html?s=648c17887f3ae72775fc9386fc3c403e37ca7334#post92829

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧