error LNK2001: 无法解析的外部符号 “__declspec(dllimport) const XXX::`vftable‘“

问题描述

使用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的相关问题真是花样繁多,层出不穷啊。。。【捂脸】

你可能感兴趣的:(c++)