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个属性:- 属性->配置属性->C/C++->常规->附加包含目录加入所有.h所在的路径(即动态库的*.h文件)
- 属性->配置属性->链接器->常规->附加库目录(所生成的*.lib文件路径)
- 属性->配置属性->链接器->输入->附加依赖项(*.lib文件的全名)
一般情况下,.lib文件和.exe文件需要放置在同一目录。
头文件
程序中使用库中的函数时需要包含其头文件。路径名称
尽量不要包含中文路径,特别是本工程的名字,之前遇到这样的错误就是因为中文路径的问题造成的。