我正在从this CodeProject article构建 Bootstrap 。可下载的文件包含 Bootstrap 的源代码和CL.EXE
、ML.EXE
和LINK.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
1条答案
按热度按时间x759pob21#
一些过时的工具无法处理像
PATH
或INCLUDE
这样的长环境变量,这些变量在现代Windows开发环境中可能变得难以处理。您的CL.EXE
恰好是Win32 PE可执行文件,因此即使在64位Windows上也应该作为32位应用程序运行。由于CL.EXE
在DOSBox中为我工作,我不得不假设直接在Windows上运行时有一些外部因素导致Out of Memory
错误。我首先想到的是环境变量,所以我把我的变量降到了最低限度。作为一个实验,可以在开始时暂时将这些命令放在
BUILD.BAT
中,看看环境变量是否有问题:如果这解决了你的问题,你可能希望把这些行放在你的
BUILD.BAT
的顶部,以保存旧的环境变量,并使用空的环境变量:要恢复这些环境变量,请将以下行放置在末尾:
其他
LINK.EXE
停止提示您输入不必要的信息,请在链接器命令行的末尾放置一个;
(标记),以强制它使用默认值。它看起来像:@
会抑制命令回显到标准输出(即,控制台)