2014-09-26 203 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 
相關問題