.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte
.data
msg1 byte "Hello World!", 0Ah, 0
.code
main proc
INVOKE printf, ADDR msg1
ret
main endp
end main
嗨,我收到以下错误:
找了一圈,发现有人说可以通过链接microsoft runtime library来修复
谁能教我如何正确修复它?
谢谢
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol _printf referenced in function _main testing C:\Users\Kin\Desktop\assembly\testing\testing\Source.obj 1
Error LNK1120 1 unresolved externals testing C:\Users\Kin\Desktop\assembly\testing\Debug\testing.exe 1
最佳答案
我没有安装 VS 2017 来尝试这个。 重要 :确保您创建了一个 Console Application
而不是 Windows Application
.创建此项目后,请确保将 MASM 添加到构建自定义中。添加 .ASM
文件到您的项目。
获取您的代码并在顶部插入以下几行:
includelib libcmt.lib
includelib libvcruntime.lib
includelib libucrt.lib
includelib legacy_stdio_definitions.lib
关于为什么在 2013 年以后的 Visual Studio 中需要这些行的解释可以在此 Stackoverflow Answer 中找到。 .
您希望 C 运行时成为您的控制台应用程序的入口点(它将调用您的
main
)。因此,您必须删除 main
从最后一行说 end main
.当您这样做时end main
它绕过 C 运行时启动启动。当您进行类似 printf
的调用时,未能正确初始化 C 运行时可能会导致程序崩溃。 .它应该只是 end
而不是 end main
.您应该测试的最终代码是:
includelib libcmt.lib
includelib libvcruntime.lib
includelib libucrt.lib
includelib legacy_stdio_definitions.lib
.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte
.data
msg1 byte "Hello World!", 0Ah, 0
.code
main proc
INVOKE printf, ADDR msg1
ret
main endp
end
关于visual-studio - Visual Studio 2017 上的简单汇编程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44083907/