Linker masm32链接器不创建可执行文件

Linker masm32链接器不创建可执行文件,linker,masm32,Linker,Masm32,我在Windows XP SP3计算机上安装了masm32。我从这里下载了masm32: 安装了它。我将路径C:\masm32\bin添加到path环境变量中。现在,我正在尝试组装和链接一个示例程序。它创建对象文件,但不创建可执行文件 示例程序: include \masm32\include\masm32rt.inc .data MyTitle db "ASM!",0 MyText db "Some Text!",0 .code start: push 0 push offset My

我在Windows XP SP3计算机上安装了masm32。我从这里下载了masm32:

安装了它。我将路径C:\masm32\bin添加到path环境变量中。现在,我正在尝试组装和链接一个示例程序。它创建对象文件,但不创建可执行文件

示例程序:

include \masm32\include\masm32rt.inc 

.data
MyTitle db "ASM!",0
MyText db "Some Text!",0

.code
start:
push 0
push offset MyTitle
push offset MyText
push 0
call MessageBoxA
call ExitProcess
end start
另外,请注意,c:\masm32\bin目录中的默认link.exe文件在链接时引发错误,如下所示:

 Assembling: sample.asm

***********
ASCII build
***********

Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/z2
"sample.obj+"
"sample.obj"
"sample.exe"
NUL
LINK : warning LNK4044: unrecognized option "z2"; ignored
LINK : fatal error LNK1181: cannot open input file "sample.obj+"
我从这里获得了link.exe的另一个版本:

使用以下命令组装和链接时:

ml.exe sample.asm sample.obj
它给出了错误:

 Assembling: sample.asm

***********
ASCII build
***********


Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

Object Modules [.obj]: sample.obj+
Object Modules [.obj]: "sample.obj"
Run File [sample.exe]: "sample.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
LINK : fatal error L1104: \masm32\lib\masm32.lib : not valid library

嗯,你肯定不想使用分段链接器,这是用于16位代码的。继续使用增量链接器版本5.12.8078

那么,你有obj文件吗?这就是ML.exe所做的。它是MASM汇编程序,它将把您的代码汇编成一个obj文件,并将该文件传递给您选择的链接器以创建exe。我说的是你选择的链接器,因为有几个链接器,你可以使用它们各自的优点和缺点

要创建对象文件:
ml/c/coff/Cp sample.asm

/c
选项告诉ml仅组装,而不尝试链接

/Cp
选项告诉ml保留所有标识符的大小写

/coff
以通用对象文件格式创建obj文件,这是我们在Windows上用于x86的文件

现在,您需要将obj文件链接到exe:
link/subsystem:windows sample.obj

/子系统:windows
创建GUI windows exe。更改为
console
以创建基于控制台的应用程序(与DOS应用程序不同)


谢谢。我已经理解了:)我看过的所有教程,包括Kip Irvine的书《状态ml》旁边的教程,也可以通过简单的命令
ml file.asm
生成exe。这不管用。他们改变了什么吗?@BugHunterUK,
ml/coff-sample.asm
是允许链接器工作所必需的。对于其他读者,请查看以下内容: