Sto tentando di trasferire il mio C++ library in g ++ utilizzando il rudimentale makefile (si compila bene in Visual Studio). La parte che sto cercando di compilare adesso misura circa 45000 righe di codice.Come diagnosticare l'errore g ++ "cc1plus.exe: memoria esaurita che alloca 838860800 byte" nel progetto di dimensioni moderate?
La libreria stessa compila OK, ma quando tento di includerlo in un'applicazione iterface console, il crash del compilatore con seguente messaggio e nient'altro:
cc1plus.exe: out of memory allocating 838860800 bytes
Succede quando includo l'intestazione principale del progetto (che è generato dalla macchina e non è impegnato nel repository, vederlo here on Gist).
Ho pensato che è perché l'intestazione è troppo grande, ma ho notato che altri progetti hanno intestazioni omnicomprensive come questa e non soffrono di questi problemi. Ho provato a rimuovere tutti gli elementi non essenziali (fino a circa 1/3, il resto era necessario per l'applicazione da compilare) dall'intestazione e il problema perseverava. Ho anche notato che il numero nel messaggio di errore non è cambiato affatto, quindi credo che ci sia qualche problema singolare che causa l'errore, piuttosto che causato dal volume di codice.
C'è un uso di template molto piccolo oltre al solito STL e il codice che sto compilando non sembra essere notevole in alcun modo.
Sto usando g ++ 4.8.1 sotto mingw32 su Windows 8.1 x64 con 16 GB di RAM. Il codice è in fase di compilazione con -std=c++98
.
Come individuare il codice che causa questo problema? g ++ non fornisce alcuna informazione diagnostica per suggerire la causa, anche con lo switch -v
(here is what it returns).
stai usando le intestazioni precompilate? –
Cosa succede se rimuovi '#pragma once'? – wallyk
un altro post: http://stackoverflow.com/questions/27588296/running-gcc-on-c-source-file-on-linux-gives-cc1plus-out-of-memory-allocati – Salmonstrikes