我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
该项目有一个超过1.3 MLOC的cpp文件.这是一个来自大型Matlab/SIMULINK仿真模型的自动生成代码,因此分割和征服并不容易.
如果它是qcc编译器的LOC限制或者由于自动生成代码中的编程实践,很难理解.
我想问一下:
virtual memory exhaustedcc1plus的问题吗?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 位支持。