【问题标题】:VS2012 heap space issue when compiling a C++ program that runs a Simulink model编译运行 Simulink 模型的 C++ 程序时出现 VS2012 堆空间问题
【发布时间】:2013-12-13 07:39:04
【问题描述】:

我已经将一个(相当大的)Simulink 模型编译为一个 dll 文件(使用 ert_shrdlib 目标)并创建了一个简单的 c++ sn-p(在 Visual Studio 2012 Express 中)加载库并逐步执行模型。当我尝试将解决方案编译为可执行文件时,出现以下编译器错误:

error C1060: compiler is out of heap space  c:\matlabr2011b_x86\simulink\include\simstruc.h

我已尝试搜索 SO 以及 google 以寻找解决此问题的方法,但尚未找到任何可行的方法。我尝试将 /Zm 设置为高 (2000) 和低 (256) 值,我尝试使用不同值的 /Heap,我尝试关闭并行编译,并使用 x64 解决方案平台。

由于该模型是公司长期研究的东西(很多人),我认为我目前无法对此做太多事情,所以我希望有一个在 Visual Studio 中处理此问题的方法。


编辑:

是的,在我的 OP 中,我没有正确设置 64 位编译器,但现在我设置了,但仍然出现同样的错误。

错误消息中引用的 Simulink 的 simstruc.h 标头包含一些非常大的结构(约 400 个元素),我猜它们是问题的根源。我试图将堆设置为可笑的值(如 20000000000),但这仍然不够。不过说真的,这台工作站有 64GB 内存,应该可以编译这个该死的头文件吧?!

【问题讨论】:

  • 使用 vc/bin/amd64 子目录中的 64 位编译器。如何使用 Express 完成这项工作非常模糊,我怀疑它是否公开了设置,甚至有编译器。如果您在一家不相信为员工提供像样工具的公司工作,那么您需要看看this site

标签: c++ matlab visual-studio-2012 compiler-errors heap-memory


【解决方案1】:

您的编译器可能超出了 32 位应用程序的地址空间限制。 编译器本身似乎没有 64 位版本(Microsoft 不喜欢)。 可以在 vc/bin/amd64 目录中找到 64 位版本的编译器。您可能需要相应地设置 PATH,或者手动调用 cl.exe 及其完整路径。

也可以尝试其他一些编译器,例如 ICC 或 GCC 或 Clang。也可能是不同的操作系统。

【讨论】:

  • 我想我现在已经设法将 Visual Studio 2012 Express 设置为使用 64 位编译器,但它仍然耗尽了堆空间。是设置问题吗?
【解决方案2】:

找到问题了。

这不是堆的问题,我的编译器无法处理包含的标头(来自 Mathworks)中的几行代码。一旦我找到它们并将它们注释掉,它就会编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多