繁体   English   中英

QT5在staticMetaObject函数外部未解决

[英]Qt5 unresolved external to staticMetaObject function

我有一个派生自QObjectQRunnable的类,并且还具有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM