VS2013封装DLL时出现LINK2019无法解析的外部符号错误

VS2013工程中含有导出的外部函数,封装时出现错误:

错误 1 error LNK2019: 无法解析的外部符号 "bool __cdecl sinstk::CmpINS2GPS(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,double * const)" (?CmpINS2GPS@sinstk@@YA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0QAN@Z),该符号在函数 "void __cdecl main_sins(void)" (?main_sins@@YAXXZ) 中被引用 J:\PVAProject(代码修改原始)\PVAProject\SINStkProject.obj PVADLL


错误 2 error LNK1120: 1 个无法解析的外部命令 J:\PVAProject(代码修改原始)\Debug\PVADLL.exe 1 1 PVADLL

毫无疑问,这里是调用动态库时出现了问题。结合网上已经有网友提出的解决方案,这里汇总一下当出现上述问题时可以对照代码查看以下问题:

  • 字符集
    生成DLL文件的字符集是Unicode而生成exe文件的字符集为默认的ASCIl。
    只要统一字符集即可解决问题:
    在项目属性->配置属性–>常规->项目默认值->字符集中设置字符集即可。
    但是,从实际情况来看,使用多字节字符不影响最后DLL的使用。

  • 调用
    既然是调用动态库,就需要查看导入库的设置是否正确。
    一般来说,对于VS需要配置3个属性:

    1. 属性->配置属性->C/C++->常规->附加包含目录加入所有.h所在的路径(即动态库的*.h文件)
    2. 属性->配置属性->链接器->常规->附加库目录(所生成的*.lib文件路径)
    3. 属性->配置属性->链接器->输入->附加依赖项(*.lib文件的全名)

一般情况下,.lib文件和.exe文件需要放置在同一目录。

  • 头文件
    程序中使用库中的函数时需要包含其头文件。

  • 路径名称

尽量不要包含中文路径,特别是本工程的名字,之前遇到这样的错误就是因为中文路径的问题造成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值