5

我正在尝试在 Linux 中使用 qcc 在 QNX Momentics IDE (4.6) 中构建一个项目。我未能成功构建过程并出现以下错误:

virtual memory exhausted: Cannot allocate memory
/opt/qnx641/host/linux/x86/usr/lib/gcc/i386-pc-nto-qnx6.4.0/4.3.3/cc1plus error 1

该项目有一个超过 1.3 MLOC 的 cpp 文件。这是从大型 Matlab/SIMULINK 仿真模型自动生成的代码,因此不容易分而治之。

很难理解是 qcc 编译器的 LOC 限制还是由于自动生成代码中的编程习惯。

我想问一下:

  • qcc 有源文件大小限制吗?
  • 导致这种情况的不良编程习惯是什么?
  • 有什么建议可以解决virtual memory exhaustedcc1plus 的问题吗?
4

1 回答 1

1

Q1: qcc 有源文件大小限制吗?A1:qcc = gcc。更准确地说:qcc 是调用 gcc 的轻量级包装器;所有真正的工作都由 gcc 完成。作为一般哲学,GNU 软件旨在不施加任意限制,我认为这对于 gcc 尤其如此。即使存在任意限制,您也不会因为系统内存不足而达到这些限制。随机链接:预处理器限制:http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html 一些 gcc 限制基准测试:gcc 模块大小限制

Q2:导致这种情况的不良编程习惯是什么?A2:例如,如您所演示的,将所有源代码转储到一个文件中。我想说这个问题与您的情况无关,因为您已经说过您无法控制生成的代码。

Q3: 有什么解决cc1plus虚拟内存耗尽问题的建议吗?A3:a) 将更多内存放入您的主机(可能有帮助,也可能没有帮助,具体取决于您拥有多少以及您的操作系统是 32 位还是 64 位);b)增加你的交换空间(同样适用);c) 如果 a/b 没有帮助,则将您的操作系统升级到 64 位并再次尝试 a/b。不幸的是,这个 64 位建议几乎肯定不适用于 QNX 6.4.1 附带的 gcc 版本。甚至可能不是最新的。

作为一般建议,由于 qcc 使用 gcc,我建议您使用主机的 gcc(Linux 附带的 gcc)构建相同的代码。一旦可行,您可能会开始寻找差异,这可能归结为 64 位支持。

于 2014-02-06T04:03:36.907 回答