Zbyt wiele sekcji, błąd asemblera, używając boost :: spirit

Jestem w trakcie pisania kompilatora dla podzbioru Java, używającboost::spirit, do leksykowania i parsowania. Podczas kompilacji fazy leksykonu / parsera kompilator zużywa1.6GB pamięci RAM (g++ (GCC) 4.8.1), nie stanowi to jednak problemu, ponieważ na tym komputerze jest dużo pamięci.

Problem polega jednak na tym, że kompilator jest gotowy, a asembler zaczyna działać (GNU assembler (GNU Binutils) 2.23.52.20130604), zawiesza się;

as: build/src/ast_generate.o: too many sections (33098)
/tmp/cc0ZyvKK.s: Assembler messages:
/tmp/cc0ZyvKK.s: Fatal error: can't write build/src/ast_generate.o: File too big
as: build/src/ast_generate.o: too many sections (33098)
/tmp/cc0ZyvKK.s: Fatal error: can't close build/src/ast_generate.o: File too big
scons: *** [build/src/ast_generate.o] Error 1

Dodawanie'-Os' do moich flag kompilatora, pozwala asemblerowi przetworzyć wyjście kompilatora, ale jak to widzę, to tylko kwestia czasu, dopóki nie trafię na ten sam problem, nawet z małą flagą optymalizacji.

Inspekcja, plik zoptymalizowany pod względem rozmiaru (ast_generate.o) za pomocąobjdump, mówi mi, że generujępe-x86-64, czego oczekiwałem w systemie Windows.

The2358 wygenerowane sekcje są jednak dla mnie szokiem. Najczęściej wydaje się, że sekcja została wygenerowana dla każdej częściboost::spirit;

 CONTENTS, ALLOC, LOAD, READONLY, DATA, LINK_ONCE_DISCARD
 ...
 60 .pdata$_ZNK5boost5lexer6detail8end_node9unique_idEv 0000000c  0000000000000000  0000000000000000  00030750  2**2
 61 .text$_ZNK5boost5lexer6detail8end_node11lexer_stateEv 00000010  0000000000000000  0000000000000000  0003075c  2**4
 ...

Więc moje pytania są;

Czy numer jest w błędzie (too many sections (X)), liczba sekcji do wygenerowania, czy jest to kod błędu?Dlaczego sekcja jest generowana dla każdego typu danych?Co mogę zrobić, aby uniknąć konieczności przechodzenia'-Os' do mojego kompilatora. To znaczy, co mogę zrobić, aby rozwiązać problem, zamiast go obejść?Czy rozdzielenie fazy lexer i parse na dwie odrębne fazy (i jednostki kompilacji), połączone tylko przez iterator leksykalny, pomoże mi?

Uwaga; Kompiluję używająccygwin64.

questionAnswers(4)

yourAnswerToTheQuestion