Qt5 未解析的外部静态元对象函数
Qt5 unresolved external to staticMetaObject function
我有一个从QObject
和QRunnable
派生的类,并且还具有Q_OBJECT
宏。包含该类的库编译良好,我得到了一个.lib
和.dll
文件。我使用的是 MSVC 2013 和 QT 5.4(来自 qt.io 的预编译二进制文件)。
使用依赖沃克查看 DLL,我可以看到该函数在那里。文件被moc'ed,这意味着我可以查看生成的CPP文件。作为证明,这是导致麻烦的功能。
const QMetaObject DHImageConvHandler::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_DHImageConvHandler.data,
qt_meta_data_DHImageConvHandler, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
};
现在,当我尝试创建链接到此库的应用程序时,出现以下错误。
unresolved external symbol "public: static struct QMetaObject const DHImageConvHandler::staticMetaObject" (?staticMetaObject@DHImageConvHandler@@2UQMetaObject@@B)
referenced in function "public: static class QString __cdecl DHImageConvHandler::tr(char const *,char const *,int)" (?tr@DHImageConvHandler@@SA?AVQString@@PBD0H@Z)
将库的项目类型从"动态库"更改为"静态库"会使这种情况消失,但我很好奇为什么。代码在库中。我用文本编辑器打开了导入库并查找了staticMetaObject
,如前所述,Dependency Walker也显示它在那里。
谁能对此有所了解?
编辑 10.01.2015我错误地说了谁在使用有问题的图书馆。该库链接到另一个库,该库随后是应用程序的一部分。
感谢阿奇为我指出正确的方向。dllimport/dllexport 前缀是代码的一部分 - 等待它 - 但每个库都使用相同的宏和预处理器指令。这意味着,当我的问题库被另一个库的代码使用时,并且两者都使用相同的宏来导出它们的符号,第二个库包括第一个库的标头,使用 dllexport 而不是 dllimport。一旦我给我的问题库它自己的dllexport/dllimport宏,一切正常。
相关文章:
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 我可以读取静态对象中的文件.txt吗?C++
- 通过 Gazebo 世界插件将静态对象附加到机器人链接
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- 完全释放静态对象内存
- 静态对象指针
- C++文件中.cpp静态对象声明
- C++类中定义静态对象
- 在初始化类的静态对象之前,是否保证初始化该类的静态成员?
- 静态对象如何调用私有构造函数
- cpp 静态对象实例化
- 等效于 Java 静态对象类C++
- 我怎么知道C++编译器是否制作线程安全的静态对象代码
- 在dlclose()之前破坏的静态对象
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- c++ 防止类共享静态对象
- 什么时候构造函数为静态对象
- 为什么本地静态对象的初始化使用隐藏的防护标志?