测试平台是windows 32bit。
所以基本上我想在这些命令中汇编+链接汇编代码片段:
nasm -fwin32 test.s
cl test.obj /link msvcrt.lib
它说:
error LNK2001: unresolved external symbol printf
在我的代码中,我确实有这样的函数调用:
call printf
所以我将所有这些改为
call _printf
它有效。
我不熟悉Windows上的编程,但有没有办法解决 printf 的外部符号?
因为我正在做一些自动转换任务,并且用 _ 开始转换所有函数调用应该非常繁琐......
任何人都可以给我一些帮助..?谢谢!
答案 0 :(得分:3)
MSVCRT与使用Visual C ++编译的所有内容一样,导出cdecl
个函数using an underscore prefix。对于您自己的库,您可以override this behaviour,但由于MSVCRT不是您的库,因此您无法更改它。
您真的必须使用下划线名称进行汇编调用。但是nasm有一个选项--prefix
,这使得这更容易:--prefix _
。 (感谢Frank Kotler提到这一点。)