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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值