assembly CL.EXE(v8.00c)在编译文件时产生“内存不足”错误

kqhtkvqz  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在从this CodeProject article构建 Bootstrap 。可下载的文件包含 Bootstrap 的源代码和CL.EXEML.EXELINK.EXE的修补版本。
CL.EXE运行时,它显示:
Microsoft(R)C/C优化编译器8.00c版
版权所有(c)Microsoft Corp 1984-1993。All rights reserved.
bootmain.cpp
内存不足
%errorlevel%返回值2。发生Out of memory错误时,文件未编译为目标文件。
注意:我使用的CL.EXE版本8.00c是Visual C
1.52c的一部分,这是Visual C++编译器的最后一个版本,可以生成16位可执行文件和二进制文件。
如果我将BootMain.cpp缩减为这个最小文件:

extern "C" void BootMain()
{
    return;
}

我仍然得到一个Out of Memory错误,当我编译它到一个对象文件:

.\VC152\CL.EXE /AT /G2 /Gs /Gx /c /Zl BootMain.cpp
x759pob2

x759pob21#

一些过时的工具无法处理像PATHINCLUDE这样的长环境变量,这些变量在现代Windows开发环境中可能变得难以处理。您的CL.EXE恰好是Win32 PE可执行文件,因此即使在64位Windows上也应该作为32位应用程序运行。由于CL.EXEDOSBox中为我工作,我不得不假设直接在Windows上运行时有一些外部因素导致Out of Memory错误。我首先想到的是环境变量,所以我把我的变量降到了最低限度。
作为一个实验,可以在开始时暂时将这些命令放在BUILD.BAT中,看看环境变量是否有问题:

set PATH=
set INCLUDE=

如果这解决了你的问题,你可能希望把这些行放在你的BUILD.BAT的顶部,以保存旧的环境变量,并使用空的环境变量:

@set OLDINC=%INCLUDE%
@set OLDPATH=%PATH%
@set PATH=
@set INCLUDE=

要恢复这些环境变量,请将以下行放置在末尾:

@set INCLUDE=%OLDINC%
@set PATH=%OLDPATH%
@set OLDINC=
@set OLDPATH=

其他

  • 如果您希望LINK.EXE停止提示您输入不必要的信息,请在链接器命令行的末尾放置一个;(标记),以强制它使用默认值。它看起来像:
.\VC152\LINK.EXE /T /NOD StartPoint.obj bootmain.obj cdisplay.obj cstring.obj;
  • 批处理文件行开头的@会抑制命令回显到标准输出(即,控制台)

相关问题