c++ - 在 Visual Studio 6.0 中将 /Zm 与 CL 一起使用
问题描述
我正在使用一个名为 Symbols 的软件进行工程建模。它为模型生成一个 .cpp 文件,以及一个用于命令行编译的 .bat 文件。它使用编译器生成 .dll 文件,然后调用该文件以完成模拟。
它使用 Visual C++ 6.0 编译器。我收到错误xxx.cpp(64952):致命错误 C1076:编译器限制:达到内部堆限制;使用 /Zm 指定更高的限制
我尝试添加/Zm500
到 bat 文件中,但没有产生任何变化。网上有一些建议可以使用/MP
。试过了。那也没用。我还尝试添加一个用户定义的环境变量 CL,其值为#/Zm500
/Zm500
=/Zm500
等,但这些都不起作用。我不是编程专家,无法对代码进行太多编辑,因为它是自动生成的。
任何人都可以帮助解决这个问题吗?为什么/Zm
不工作?我应该做点别的吗?我在 Win10 机器中使用 Visual Studio 6.0。.cpp 文件有 151,000 行代码。在 .bat 文件的内容下方添加
@ECHO OFF
ECHO --------------------Configuration: 8 Coil No MC 45L 1Rd - Win32 Release--------------------
SET OLDPATH=%PATH%
PATH="C:\WINDOWS";"C:\WINDOWS\system32";"C:\WINDOWS\COMMAND";"F:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin";"F:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin";"F:\Program Files (x86)\Microsoft Visual Studio\Common\Tools";"F:\Program Files (x86)\Microsoft Visual Studio\Common\Tools\WinNT";
ECHO Compiling...
CL.EXE /Zm500 /MP /nologo /I "D:\Symbols\SYMBOLS Sonata\Bin" /I "D:\Bondgraph_Works\Header_Files" /I "F:\Program Files (x86)\Microsoft Visual Studio\VC98\Include" /I "F:\Program Files (x86)\Microsoft Visual Studio\VC98\ATL\Include" /I "F:\Program Files (x86)\Microsoft Visual Studio\VC98\MFC\Include" /MT /W3 /GX /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /Fo"8 Coil No MC 45L 1Rd.obj" /Fp"8 Coil No MC 45L 1Rd.pch" /Fd"" /FD /c "8 Coil No MC 45L 1Rd.cpp"
ECHO Linking...
LINK.EXE /libpath:"D:\Symbols\SYMBOLS Sonata\Bin" /libpath:"D:\Symbols\Borland\BCC55\Lib" /libpath:"F:\Program Files (x86)\Microsoft Visual Studio\VC98\Lib" /libpath:"F:\Program Files (x86)\Microsoft Visual Studio\VC98\MFC\Lib" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:no /machine:I386 /def:"8 Coil No MC 45L 1Rd.def" /out:"8 Coil No MC 45L 1Rd.dll" "8 Coil No MC 45L 1Rd.obj" "Library.Lib"
PATH=%OLDPATH%
ECHO End of Compilation.
解决方案
看看是否可以增加 /Zmnnnnn 数字的大小。
/Zm10000 我不记得上限了。微软在某些时候对它可以跟踪的符号有硬性限制。Visual Studio 6.0 是 CIRCA 1998 编译器。相比之下,与驾驶特斯拉相比,这就像骑马工作。
我不相信 Visual Studio 6.0 支持 /MP 开关。它那么旧。
您可以使用 tiny_cc 预处理器,这是我们在需要预处理大文件时使用的一种解决方案。Tiny_cc 是开源的,但您必须构建它,而且我不记得切换到 CL.exe 来告诉它使用该预处理器。但这就是我们使用的解决方案。
如果您精通“C”,则可以将文件一分为二,和/或尝试使用预编译的标头,这可能会减少预处理器看到的符号。
但是 /Zm500 似乎是一个小数字,我认为您可以更高。
推荐阅读
- jasper-reports - 如何在 Jasper 报告中添加空的最大行?
- bash - 如何启动 mvn spring-boot:run 然后运行 wget?
- r - 如何计算定义为类对象“字符”的向量中的数字?
- docker - 运行整个 docker 容器,并将卷安装在内存中
- c# - 如何让 Service Fabric 反向代理在 Azure 上工作
- amazon-web-services - 如何将文件从 Google Cloud Instance 传输到 AWS Instance
- c - 为什么用 0 初始化数组会清除整个缓冲区?
- c# - 如何匹配字符串忽略大小写和重音?
- c# - 如果它为“null”,是否可以使用设置的 TargetNullValue 更新数据绑定源值?
- visual-studio - 有没有办法远程调试部署到虚拟目录的 ASP.net 应用程序?