我在汇编中写了一个简单的hello world程序。我想在Windows中生成它的.exe文件,但是当我用io.obj链接我的目标文件时,我收到一个链接器错误:“未解析的外部符号”。
这是我的代码:
include io.h
.386
.model flat,stdcall
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
.stack 4096
.data
msg db 'hello world!',13,10,0
.code
_start:
output msg
invoke ExitProcess,0
end _sart
public _start
end
我可以使用命令成功组装程序:
ml /c /coff x.asm
但无法与命令链接:
link /subsystem:console /entry:start x.obj io.obj
链接器错误是:
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
LINK : error LNK2001: unresolved external symbol _start
1.obj : error LNK2001: unresolved external symbol itoa_proc
io.obj : error LNK2001: unresolved external symbol itoa_proc
1.obj : error LNK2001: unresolved external symbol atoi_proc
io.obj : error LNK2001: unresolved external symbol atoi_proc
1.obj : error LNK2001: unresolved external symbol out_proc
io.obj : error LNK2001: unresolved external symbol out_proc
1.obj : error LNK2001: unresolved external symbol ins_proc
io.obj : error LNK2001: unresolved external symbol ins_proc
1.obj : error LNK2001: unresolved external symbol inc_proc
io.obj : error LNK2001: unresolved external symbol inc_proc
1.exe : fatal error LNK1120: 6 unresolved externals
我做错了什么?
答案 0 :(得分:0)
尝试
link /subsystem:console /entry:start x.obj
您不必单独链接io.obj
,因为它将包含在x.obj
答案 1 :(得分:0)
看起来你对io.h
实际做的事情有误导。 io.h
是包含它的程序使用的头文件,因此没有必要链接io.obj
,实际上是不可能的。除此之外,你做了一些简单的语法错误。尝试用以下代码替换原始代码:
include io.h
.386
.model flat,stdcall
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
.stack 4096
.data
msg db 'hello world!',13,10,0
.code
start:
output msg
invoke ExitProcess,0
end start
与此相关(与上述相同):
link /subsystem:console /entry:start x.obj