【问题标题】:masm ml 'unresolved external symbol' errormasm ml“未解析的外部符号”错误
【发布时间】:2014-09-26 11:36:20
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • io.h 包含什么
  • 包含 itoa、atoi、输出、输入和输入的宏定义作者:R. Detmer

标签: assembly linker masm masm32


【解决方案1】:

试试

link /subsystem:console /entry:start x.obj

您不必单独链接io.obj,因为它将包含在x.obj

【讨论】:

    【解决方案2】:

    看起来您对 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-04
      • 2012-10-17
      • 2012-10-31
      • 2012-08-31
      相关资源
      最近更新 更多