Ja próbuje portu mój C++ library do g ++ przy użyciu prymitywny makefile (kompiluje dobrze w Visual Studio). Część, którą próbuję teraz skompilować, mierzy około 45 000 linii kodu.Jak zdiagnozować błąd g ++ "cc1plus.exe: brak pamięci alokującej 838860800 bajtów" w projekcie o umiarkowanej wielkości?
Sama biblioteka kompiluje OK, ale gdy próbuję włączenie go do aplikacji iterface konsoli wywala kompilator z następujący komunikat i nic innego:
cc1plus.exe: out of memory allocating 838860800 bytes
Zdarza się, kiedy to główny nagłówek projekt (który jest generowany maszynowo i nie jest zatwierdzony do repozytorium, patrz: here on Gist).
Pomyślałem, że to dlatego, że nagłówek jest zbyt duży, ale zauważyłem inne projekty wszechogarniająca nagłówków tak i nie cierpią z powodu tych problemów. Próbowałem rozebrać wszystkie nieistotne (do 1/3, reszta była niezbędna do kompilacji aplikacji) z nagłówka, a problem trwał. Zauważyłem też, że liczba w komunikacie o błędzie się nie zmieniła, więc uważam, że jest jakiś pojedynczy problem powodujący błąd, a nie jest spowodowany samą objętością kodu.
Niewiele jest wykorzystanie szablonu poza zwykłym STL oraz kod mam opracowującym nie wydają się być niezwykłe w jakikolwiek sposób.
używam g ++ 4.8.1 pod mingw32 Windows 8.1 x64 z 16 GB pamięci RAM. Kod jest kompilowany z -std=c++98
.
Jak mogę znaleźć kod, który jest przyczyną tego problemu? g ++ nie dostarcza mi żadnych informacji diagnostycznych sugerujących przyczynę, nawet z przełącznikiem -v
(here is what it returns).
używasz prekompilowanych nagłówków? –
Co stanie się, jeśli usuniesz '#pragma once'? – wallyk
inny wpis: http://stackoverflow.com/questions/27588296/running-gcc-on-c-source-file-on-linux-gives-cc1plus-out-of-memory-allocati – Salmonstrikes