.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运行时库来修复
谁能教我如何才能准确地解决它?
Thanks
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 中需要这些行的解释可以在此处找到堆栈溢出答案 https://stackoverflow.com/a/33724617/3857942.
你想要的C运行时作为控制台应用程序的入口点(反过来会调用您的main
)。因为这个你MUST remove main
从最后一行说end main
。当你这样做时end main
它绕过了C运行时启动启动。未能正确初始化C当您进行如下调用时,运行时可能会导致程序崩溃printf
。它应该简单地是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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)