Qt5在staticMetaObject函数外部未解析

Rob*_*ohr 5 c++ qt

我有一个从派生的类QObjectQRunnable和也有Q_OBJECT宏.包含该类的库编译正常,我得到一个.lib.dll文件.我正在使用MSVC 2013和QT 5.4(来自qt.io的预编译二进制文件).

使用Dependency Walker查看DLL,我可以看到函数在那里.文件get的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}
};
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试创建链接到此库的应用程序时,我收到以下错误.

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)
Run Code Online (Sandbox Code Playgroud)

将库的项目类型从"动态库"更改为"静态库"会使其消失,但我很好奇为什么.代码在lib中.我用文本编辑器打开导入库并查找staticMetaObject,如前所述,Dependency Walker也显示它就在那里.

任何人都可以对此有所了解吗?

编辑10.01.2015 我想知道谁在使用这个库.该lib链接到另一个lib,然后是app的一部分.

Rob*_*ohr 5

感谢Archie指出我正确的方向.dllimport/dllexport前缀是代码的一部分 - 等待它 - 每个库都使用相同的宏和预处理器指令.这意味着,当我的问题库被另一个库的代码使用,并且两个都使用相同的宏来导出它们的符号时,第二个库包含第一个库的头文件,其中包含dllexport而不是dllimport.一旦我给我的问题lib它自己的dllexport/dllimport宏一切正常.