windows - 如何在 win32 控制台上解析 "printf"而不是 "_printf"的符号?

标签 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的外部符号吗?

因为我在做一些自动转换的任务,转换所有以_开头的函数调用应该很繁琐...

谁能给我一些帮助..?谢谢!

最佳答案

MSVCRT,就像用 Visual C++ 编译的所有东西一样,导出 cdecl 函数 using an underscore prefix .对于您自己的图书馆,您可以 override this behaviour ,但由于 MSVCRT 不是您的库,因此您无法更改它。

您真的必须让您的程序集调用使用下划线名称。但是 nasm 有一个选项,--prefix ,这使得这更容易:--prefix _。 (感谢弗兰克科特勒提到这一点。)

关于windows - 如何在 win32 控制台上解析 "printf"而不是 "_printf"的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028454/

相关文章:

c++ - 从未调用过 WSASend 完成例程

c++ - 无法找到 c :\windows\system32\mfc100d. dll

windows - 重置 Windows 中的打开文件对话框位置

c++ - 如何从 ip 地址或 sockaddr_in 结构(C++/WinAPI)获取主机名?

winapi - 什么时候使用SeTcbPrivilege? (“充当操作系统的一部分。)

c - 使用 Windows 调试器查看用 C 写入的内存位置?

c++ - 使用 Areo Snap、阴影、最小化动画和抖动的无边框窗口

c++ - 静态文本颜色

linux - 在 i386 Linux 上的汇编中提高 BRK

c++ - Visual Studio 2010 的 dword ptr [...] 问题