Windows 静态库函数名称问题
1. 环境
Windows 10 10.0.18363
Visual Studio 2019
2. 问题描述
- 在
x86
模式下生成一个静态库x86_test.lib
- 在
x64
模式下使用此库 - 编译错误,错误信息如下:
LNK2019:无法解析的外部符号
2.1 问题原因调查
使用dumpbin
查看静态或动态库的函数名称,dumpbin
安装visual studio
时会自带:
- 静态库:
dumpbin /LINKERMEMBER *.lib
- 动态库:
dumpbin /EXPORTS *.dll
查看 x86_test.lib
函数名称 dumpbin /LINKERMEMBER x86_test.lib
,函数名称如下:
......
12 _testFun
......
可以看到函数名前多了一个前缀_
,当然这在Windows x86
项目中直接使用也是可以的。但是在x64
下使用就会存在问题。
3. 总结
在较新的系统上开发尽量使用x64
架构,避免不必要的麻烦。目前还未找到哪个参数设置x86生成库的函数名称禁用前缀