![](/img/trans.png)
[英]Unresolved external symbol: QMetaObject const QwtPlotMagnifier::staticMetaObject
[英]Qt5 unresolved external to staticMetaObject function
我有一个派生自QObject
和QRunnable
的类,并且还具有Q_OBJECT
宏。 包含该类的库可以正常编译,并且我得到一个.lib
和.dll
文件。 我正在使用MSVC 2013和QT 5.4(来自qt.io的预编译二进制文件)。
使用Dependency Walker查看DLL,我可以看到该函数在那里。 文件已移动,这意味着我可以查看生成的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)
将库的项目类型从“动态库”更改为“静态库”可以消除这种情况,但我很好奇为什么。 该代码在lib中。 我使用文本编辑器打开了导入库,并寻找了staticMetaObject
,并且如前所述,Dependency Walker也显示出它的存在。
谁能对此有所启发?
编辑10.01.2015我弄错了谁在使用相关库。 该库链接到另一个库,该库随后成为应用程序的一部分。
感谢Archie为我指出正确的方向。 dllimport / dllexport前缀是代码的一部分-等待它- 但是每个库都使用相同的宏和预处理程序指令。 这意味着,当我的问题库被另一个库的代码使用,并且都使用相同的宏来导出其符号时,第二个库将使用dllexport而不是dllimport来包含第一个库的标头。 一旦我给我的问题lib提供了自己的dllexport / dllimport宏,一切就可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.