VS 2012 开发dll编译出错:error LNK2019: 无法解析的外部符号

无法解析的外部符号,这是一个非常常见的链接错误,造成这个错误的原因比较多,这里列几种容易忽略的原因:

1. 引用的函数有定义但没有实现,链接器找不到函数实现代码。

2. 引用的函数没有导出,请使用动态库导出关键字:__declspec(dllexport) 标识导出函数。

3. 函数虽然有导出,但是引用的时候没有加入输入库,在项目属性->链接器->输入->附加依赖项中引入lib文件。

4. 编译导出库和使用导出库的编译选项不一样,这是常容易忽略的地方,结果到处找原因耗费很多时间。常见的选项不一样有:

4.1 函数调用约定不 一样,这个必须是一样才能调用,选项位置在项目->配置属性->c/c++->调用约定,选项有:__cdecl (/Gd),__fastcall (/Gr),__stdcall (/Gz),这是最容易忽略的地方。

4.2 字符集选的不一样,有的选多字节字符,有的选Unicode,这个也必须一致,项目->常规->字符集。

4.3 是否引用了MFC,还是只使用了Windows标准库,项目->常规->MFC使用。

5. 混合编译c和c++代码,记得在c代码块中加以下代码:

#ifdef  __cplusplus
extern "C" {
#endif

//此处为你的c代码

#ifdef __cplusplus } #endif

6. 由于c的标准的不同,如果提示错误:

error C2143: 语法错误 : 缺少“;”(在“类型”的前面)

请记得将声明的任何变量放到代码的最前面,先声明再使用,不能在后面声明,否则搞得你一头雾水。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值