我有一个从派生的类QObject和QRunnable和也有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的一部分.
感谢Archie指出我正确的方向.dllimport/dllexport前缀是代码的一部分 - 等待它 - 但每个库都使用相同的宏和预处理器指令.这意味着,当我的问题库被另一个库的代码使用,并且两个都使用相同的宏来导出它们的符号时,第二个库包含第一个库的头文件,其中包含dllexport而不是dllimport.一旦我给我的问题lib它自己的dllexport/dllimport宏一切正常.
| 归档时间: |
|
| 查看次数: |
3698 次 |
| 最近记录: |