2014-09-26 205 views
0

我在汇编中编写了一个简单的hello世界程序。我想在windows中生成它的.exe文件,但是当我用io.obj链接我的目标文件时,我得到一个链接器错误:“无法解析的外部符号”。masm ml'无法解析的外部符号'错误

这里是我的代码:

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

什么呢io.h包含 – 2014-09-26 20:27:50

+0

包含宏定义为itoa,的atoi,输出,输入和inputc 作者:R. Detmer – blank94 2014-09-26 21:31:01

回答

0

尝试

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

你不应该,因为这将被包含在x.obj

0

分别链接io.obj看起来你是在什么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 
相关问题