网上大部分说是没有生成 moc_XXXX.cpp 文件导致的,但是我这个不是。
我是静态库调用动态库方法,编译时正常,链接时报错的。后来查找发现,动态库有个宏定义如下:
#ifndef BUILD_STATIC
# if defined(QTHREADMANAGER_LIB)
# define QTHREADMANAGER_EXPORT Q_DECL_EXPORT
# else
# define QTHREADMANAGER_EXPORT Q_DECL_IMPORT
# endif
#else
# define QTHREADMANAGER_EXPORT
#endif
而静态库中,vs默认预处理定义里会加上BUILD_STATIC,这样就导致了动态库的导出宏定义失效(使用了# define QTHREADMANAGER_EXPORT)。
解决方法可以是去除BUILD_STATIC预处理定义的预处理定义,也可以修改原来动态库的宏定义,防止冲突。
另外常见的LNK2019 问题可参考:https://blog.youkuaiyun.com/ljqiankun/article/details/129239722