Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cc1plus: Virtual memory exhausted

Tags:

c++

qnx

momentics

I am trying to build a project in QNX Momentics IDE (4.6) using qcc in Linux. I fail to succeed the build process with the following error:

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

The project has a cpp file with more than 1.3 MLOC. This one is an autogenerated code from a large Matlab/SIMULINK simulation model so it is not easy to divide and conquer.

It is hard to understand if it is LOC limit of qcc compiler or due to a programming practice in the autogenerated code.

I would like to ask:

  • Is there any source file size limit for qcc?
  • What are the bad programming practices that cause this?
  • Any suggestions to fix virtual memory exhausted problem of cc1plus?
like image 298
wojakzek Avatar asked Nov 10 '22 13:11

wojakzek


1 Answers

Q1: Is there any source file size limit for qcc? A1: qcc = gcc. More accurately: qcc is a lightweight wrapper that calls gcc; all the real work is done by gcc. GNU software is, as a general philosophy, designed to not impose arbitrarily limit and I presume this is especially true for gcc. Even if there exist arbitrarily limits you are not hitting those because you are running out of system memory. Random links: preprocessor limits: http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html some gcc limits benchmarking: gcc module size limits

Q2: What are the bad programming practices that cause this? A2: E.g., dumping all source code into a single file, as you demonstrated. I'd say this question is not relevant to your case because you already stated you don't have control over the generated code.

Q3: Any suggestions to fix virtual memory exhausted problem of cc1plus? A3: a) put more ram into your host computer (may or may not help depending on how much you have and if your OS is 32 or 64 bit); b)increase your swap-space (same applies); c) if a/b does not help then upgrade your OS to 64 bit and try a/b again. Unfortunately, this 64-bit suggestion almost surely does not apply to the gcc version that QNX shipped with 6.4.1. Maybe not even to the latest one.

As a general suggestion, since qcc is using gcc I'd recommend that you have the same code build using the host's gcc (gcc that is shipped with your Linux). Once that works you may start looking for the differences, which likely boil down to 64-bit support.

like image 75
maverick Avatar answered Nov 28 '22 00:11

maverick