如何在win32控制台上解析“printf”而不是“_printf”的符号?

时间:2014-01-09 18:39:08

标签: windows winapi assembly dll

测试平台是windows 32bit。

所以基本上我想在这些命令中汇编+链接汇编代码片段:

nasm -fwin32 test.s
cl test.obj /link msvcrt.lib 

它说:

error LNK2001: unresolved external symbol printf

在我的代码中,我确实有这样的函数调用:

call printf

所以我将所有这些改为

call _printf

它有效。

我不熟悉Windows上的编程,但有没有办法解决 printf 的外部符号?

因为我正在做一些自动转换任务,并且用 _ 开始转换所有函数调用应该非常繁琐......

任何人都可以给我一些帮助..?谢谢!

1 个答案:

答案 0 :(得分:3)

MSVCRT与使用Visual C ++编译的所有内容一样,导出cdecl个函数using an underscore prefix。对于您自己的库,您可以override this behaviour,但由于MSVCRT不是您的库,因此您无法更改它。

您真的必须使用下划线名称进行汇编调用。但是nasm有一个选项--prefix,这使得这更容易:--prefix _。 (感谢Frank Kotler提到这一点。)