masm ml'未解决的外部符号'错误

时间:2014-09-26 11:36:20

标签: assembly linker masm masm32

我在汇编中写了一个简单的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

我做错了什么?

2 个答案:

答案 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