最近工作的时候有一个链接库的对接工作,在对接时发生了一些小问题,这篇FAQ是办公室写这个库的工程师戴工写的,这里记录一下:
一、编译工程时报链接错误“不允许dllimport静态数据成员的定义”
1.错误截图

2.错误原因分析
此错误是Q_OBJECT和Q_DECL_IMPORT宏共同作用时产生的结果。查询微软文档可知:静态数据成员无法在定义dllimport类的同一程序中指定定义。

这句话表明,导出类时,其静态成员不可被外部覆盖定义。举个例子,有导出类如下:

其中宏定义为:
根据微软关于dllimp

文章介绍了在对接链接库时遇到的三个主要问题:1)使用Q_OBJECT和Q_DECL_IMPORT宏导致的编译错误,原因是静态数据成员不能在dllimport类中定义;2)不同线程间的对象创建警告,可能由于工程和库的版本不匹配;3)不安全的单例模式在COM组件中的风险,并提出了使用QSharedPointer实现的安全单例模式。
最低0.47元/天 解锁文章
448

被折叠的 条评论
为什么被折叠?



