2014-02-05 12 views
5

Ich versuche ein Projekt in QNX Momentics IDE (4.6) mit qcc in Linux zu erstellen. Ich kann nicht den Build-Prozess mit dem folgenden Fehler, um folgen:cc1plus: Virtueller Speicher erschöpft

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 

Das Projekt hat eine CPP-Datei mit mehr als 1,3 MLOC. Dieser ist ein automatisch generierter Code aus einem großen Matlab/SIMULINK-Simulationsmodell, so dass es nicht einfach ist, ihn zu teilen und zu erobern.

Es ist schwer zu verstehen, ob es sich um ein LOC-Limit des qcc-Compilers oder um eine Programmierpraxis im automatisch generierten Code handelt.

würde Ich mag fragen: für qcc

  • Gibt es eine Quelle Dateigrößenbeschränkung?
  • Was sind die schlechten Programmierpraktiken, die das verursachen?
  • Irgendwelche Vorschläge zu beheben virtual memory exhausted Problem von cc1plus?
+1

Das ist eine riesige Datei !!! Sie müssen es in kleinere Kompilierungseinheiten aufteilen. – Sean

+0

Gibt es eine Grenze, die Sie für die Dateigröße kennen? – wojakzek

+0

@wojakzek: Das Limit ist Ihr RAM (oder ulimit Einstellungen). – PlasmaHH

Antwort

1

Q1: Gibt es ein Limit für die Quelldateigröße für qcc? A1: qcc = gcc. Genauer gesagt: qcc ist ein einfacher Wrapper, der gcc aufruft. Die ganze Arbeit wird von gcc erledigt. GNU-Software ist, als eine allgemeine Philosophie, entworfen, um keine willkürliche Grenze aufzuerlegen, und ich nehme an, dass dies besonders für gcc gilt. Selbst wenn es willkürliche Grenzen gibt, treffen Sie diese nicht, weil Ihnen der Systemspeicher ausgeht. Zufällige Links: Präprozessor Grenzen: http://gcc.gnu.org/onlinedocs/cpp/Implementation-limits.html einige gcc Grenzen Benchmarking: gcc module size limits

Q2: Was die schlechten Programmierpraktiken sind, die dies verursachen? A2: Zum Beispiel Dumping aller Quellcode in einer einzigen Datei, wie Sie gezeigt haben. Ich würde sagen, dass diese Frage für Ihren Fall nicht relevant ist, weil Sie bereits angegeben haben, dass Sie keine Kontrolle über den generierten Code haben.

Q3: Irgendwelche Vorschläge, zum des virtuellen Gedächtnisses zu beheben erschöpft Problem von cc1plus? A3: a) Legen Sie mehr RAM in Ihren Host-Computer (kann oder kann nicht helfen, je nachdem, wie viel Sie haben und ob Ihr Betriebssystem 32 oder 64 Bit ist); b) erhöhen Sie Ihren Swap-Space (gilt auch); c) Wenn a/b nicht hilft, dann aktualisiere dein Betriebssystem auf 64 bit und versuche a/b erneut. Leider trifft dieser 64-Bit-Vorschlag fast sicher nicht auf die gcc-Version zu, die QNX mit 6.4.1 ausgeliefert hat. Vielleicht nicht einmal zum letzten.

Als allgemeinen Vorschlag, da qcc gcc verwendet, würde ich empfehlen, dass Sie den gleichen Code mit dem gcc des Hosts (gcc, das mit Ihrem Linux geliefert wird) erstellen. Sobald das funktioniert, können Sie nach den Unterschieden suchen, die wahrscheinlich auf 64-Bit-Unterstützung hinauslaufen.