Objektdatei hat zu viele Abschnitte

Wir mache Regen Gebrauch von boost::serialization und Vorlagen im Allgemeinen. Alles scheint gut zu laufen.

Ausnahme, die wir getroffen haben ein Problem auf unserem Windows-builds. Es scheint Probleme in der Objekt-Dateien zu groß. Wir sind mit MinGW/Msys mit g++ 4.7.0.

c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/as.exe: CMakeFiles/source.dir/sourcecode.cpp.obj: too many sections (33396)
C:\Users\username\AppData\Local\Temp\ccnAocvD.s: Assembler messages:
C:\Users\username\AppData\Local\Temp\ccnAocvD.s: Fatal error: can't write CMakeFiles/source.dir/sourcecode.cpp.obj: File too big

Master-google enthüllt das archivierte Nachricht, http://sourceforge.net/mailarchive/forum.php?thread_name=CA%2Bsc5mkLvj%3DW9w2%3DsY%3Dc_N%3DEwnsQuPDEX%3DiBcbsbxS3CuE_5Bg%40mail.gmail.com&forum_name=mingw-users

In ihm, es zeigt an, dass eine andere person trifft so ziemlich das gleiche Problem. Es hat eine option für Visual Studio /bigobj option, die angezeigt wird, zu tun, was wir brauchen. Allerdings sind wir nicht in der Lage, sich zu bewegen, um Visual Studio.

Ein Vorschlag war hinzufügen --hash-Größe auf den assembler-Optionen. Dies hat nicht geholfen.

Wenn ich mich nicht Irre, das Problem liegt in der Tatsache, dass die Objekt-Dateien haben ein limit von 2^16 Einträge in Ihnen. Eigentlich, entsprechend der Fehlermeldung, würde ich es Wagen, dass es ein signed 2^16 Einträgen, aber das ist peanuts. Die /bigobj option für Visual Studio ändern würde, dass 2^32. Die mailing-Liste Ergebnis nicht wussten, eine entsprechende option für den gcc. Weitere google-Ergebnisse scheinen nicht relevant zu sein.

In diesem Punkt müssen wir überarbeiten unseren code (pfui) um dieses Problem zu umgehen. Aber ich bin immer noch besorgt, dass, mit schweren templating, wir laufen könnte das Problem wieder und wieder (haben wir bereits, es mit drei Quell-Dateien).

Also meine Frage ist also; gibt es eine gcc-äquivalent zu Microsoft /bigobj option? Gibt es eine Dritte option, ich bin noch nicht gefunden?

Kommentar zu dem Problem
Vielleicht ändern gcc? Kommentarautor: Yakk - Adam Nevraumont
Ich persönlich würde sehr gerne zu. Ich würde lernen müssen, das format der Objekt-Dateien, die derzeit verwendet wird. Ich hätte zu kommen mit einem neuen format. Klingt wie eine sehr persönliche Projekt. Leider ist mein Arbeitgeber möchte nicht, dass die Art von Verantwortung. 🙂 Kommentarautor: inetknght
Eine andere Möglichkeit ist, dass die Objekt-Datei hat ein 2-GB-Grenze oder somesuch. Wie sicher sind Sie, dass es sich bei der Zahl der exportierten Symbole? Etwas googlen zeigt, dass gcc nicht haben eine harte Barriere bei 2^16... Hast du dir bei mingw-w64.sourceforge.net ? Kommentarautor: Yakk - Adam Nevraumont
@Yakk, clevere Nutzung von ProcessMonitor während des g++ mit der assembler zeigt, dass der Vermittler assembler-Datei (ccnAocvD.s in der Fehlermeldung) ist um 60MiB in der Größe. Es geht dann zum erstellen der Objekt-Datei (assumably, um sicherzustellen, dass er es öffnen kann). Ein paar Sekunden später, wird er beendet und die Fehlermeldung erscheint auf der Konsole. Ich nehme an, die wenigen Sekunden, ist die Zeit, die es braucht um die assembly-Datei, und bestimmen, dass es zu viele Symbole. Die 2GB Schranke erwähnt wurde in der mailing-Liste. Ich wollte sicher sein, dass nicht die Täter. Kommentarautor: inetknght
@inetkght Wenn Sie hier schauen, wir haben jemanden testen von gcc zu sehen, ob es ein hard-limit auf den Wert: "gcc.gnu.org/ml/gcc-patches/2007-05/msg02104.html - aber das war '07. Sie könnte erwägen, herauszufinden, wie laufen diese tests mit den aktuellen compiler, die möglicherweise isolieren, die Grenze ist das problem. Kommentarautor: Yakk - Adam Nevraumont

InformationsquelleAutor der Frage inetknght | 2013-05-16

Schreibe einen Kommentar