我试图用printf
汇编语言调用 x86 C 函数,但出现链接错误:error LNK2019: unresolved external symbol _printf referenced in function _main
。
.model flat, C
.code
extern printf: proc
main proc
push offset msg
push offset fmt
call printf
ret
main endp
.data
msg db "Hello world!", 0
fmt db "%s", 0
end
我怎样才能解决这个问题?
这里有几种方法。如果想使用现有的库 -
_printf
已经在里面了,legacy_stdio_definitions.lib
但如果使用它,还需要链接到legacy_stdio_wide_specifiers.lib
并ucrt.lib
调用__initterm
(或将入口点设置为_wmainCRTStartup
)在这种情况下,完整的代码看起来像(请注意,这里最好使用
.const
section 来.data
代替常量数据)并将文件链接至
另一种方法 - 构建我自己的 msvcrt.lib(标准 msvcrt.lib 没有,
printf
尽管它已被导出msvcrt.dll
然后使用它)最小方法和
msvcrt.def
:建立
然后就可以使用这个
链接至:
(更通用的为 dll 自动构建库的方法 -此处)
32位代码示例:
64 位代码示例:
如果你使用的是 Windows,那么
main
该函数实际上应该被命名为_main