测试平台是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/