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: 语法错误 : 缺少“;”(在“类型”的前面)

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

 

以下VC2019编译错误是缺少什么库文件1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_protect 1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_unprotect 1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_create 1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_crypto_policy_set_rtp_default 1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_dealloc 1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_protect_rtcp 1>MetaTRCcore.lib(YangSRtp.obj) : error LNK2001: 无法解析外部符号 _srtp_unprotect_rtcp 1>MetaTRCcore.lib(YangSslOpenssl.obj) : error LNK2001: 无法解析外部符号 _srtp_init 1>MetaTRCcore.lib(YangSslOpenssl.obj) : error LNK2001: 无法解析外部符号 _srtp_shutdown 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_init 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_socket 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_setsockopt 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_sendv 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_bind 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_connect 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_close 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_shutdown 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_conninput 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_set_non_blocking 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_register_address 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_deregister_address 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_set_ulpinfo 1>MetaTRCcore.lib(YangSctp.obj) : error LNK2001: 无法解析外部符号 _usrsctp_sysctl_set_sctp_ecn_enable 1>libcrypto.lib(cryptlib.obj) : error LNK2001: 无法解析外部符号 __vsnwprintf 1>libcrypto.lib(cryptlib.obj) : error LNK2001: 无法解析外部符号 __vsnprintf
最新发布
08-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值