为什么 MSVC 的 LNK2019 错误信息中,函数名前面都有多余的下划线?

2020-11-19 09:33:28 +08:00
 AndyAO

例如

error LNK2019: unresolved external symbol _snprintf referenced in function _elog_hexdump.

表达的意思是在函数elog_hexdump中引用不存在的符号snprintf,而不是_snprintf.

为什么会这样?

在查看Linker Tools Error LNK2019 | Microsoft Docs,并且去谷歌搜索后也没有找到答案.

809 次点击
所在节点    问与答
3 条回复
Mithril
2020-11-19 09:46:59 +08:00
一般来说是因为你 DLL 里面导出函数的声明有问题,或者忘了加 lib 文件。
不过你这个是因为 printf 系列函数全部改成 inline 的了,你得在你的代码里引用 crt 的 header,或者添加上那个 legacy stdio 的 lib
codehz
2020-11-19 09:55:26 +08:00
是调用约定的问题,具体内容自己搜索
si
2020-11-19 09:57:38 +08:00
搜索:函数名修饰,VC 的编译器会在 C 的函数名前面加个下划线,stdcall 的还在后面加上 @参数字节数。C++的还后面加上参数类型,用不同的字母代表不同的类型。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/726967

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX