问题描述
使用VS2017编译DLL,报链接错误
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) const XXX::`vftable'"
分析
一般链接问题都是相应的lib文件没有正确设置,要么没有添加依赖库路径,要么没有添加依赖库。但仔细检查发现这些都已经正确设置了,那么问题会出在哪儿呢?
上网查吧,看看网友们怎么说。
1、字符集冲突
生成DLL和使用DLL的工程编译的字符集不同导致。测试之后发现不行!
2、缺少宏定义
只查到了一份缺少宏定义的帖子,但说法比较笼统,没有说明原因,不适用其他人(比如我)。但思路是对的!
解决方案
找到工程中定义__declspec(dllexport)和__declspec(dllimport)的地方,比如我的工程定义如下:
#ifdef COMMON_LIB
# define COMMON_EXPORT __declspec(dllexport)
#else
# define COMMON_EXPORT __declspec(dllimport)
#endif
因此,只需要在工程中添加COMMON_LIB宏,即可(因为dll中符号是导出给其他模块使用,因此是dllexport)。
注:关于__declspec(dllexport)和__declspec(dllimport)的区别,自行搜索即可。
另
话说,关于LNK2001的相关问题真是花样繁多,层出不穷啊。。。【捂脸】