Ich habe Probleme beim Verbinden einer gemeinsam genutzten Bibliothek mit gcc 3.2.3 mit binutils 2.18. Wenn ich versuche, die Bibliothek zu verknüpfen, erhalte ich den folgenden Fehler:
.gnu.linkonce.t _... referenziert im Abschnitt .rodata: definiert in verworfenem Abschnitt .gnu.linkonce.t ...
Ich habe ziemlich viel gegoogelt und die meisten Orte scheinen darauf hinzuweisen, dass es eine Regression in binutils 2.17 und später in 2.18.50 ist, aber ich war neugierig, ob jemand wüsste, ob es spezielle Workarounds dafür gab das Problem, ohne binutils und gcc zu berühren.
Danke.
Dies stellte sich als ein seltsames Ergebnis heraus, wenn das System gcc mit anderen binutils nicht übereinstimmte. / usr / bin / gcc wurde verwendet (3.2.3) und / usr / local / bin / ld wurde verwendet, da / usr / local / bin im Pfad vor / usr / bin war. Als wir umgeschalten haben, dass / usr / bin am Anfang des Pfades stand, wurde das entsprechende / usr / bin / ld aufgerufen (binutils 2.14) und dies scheint das Problem gelöst zu haben.
Dieser Fehler wurde gefunden und wurde hier GCC bugzilla gemeldet, ein kleiner Testfall In den Kommentaren wurde auf den Bug eingegangen, was ich als sehr hilfreich empfand, um keine Zeit zu verschwenden. Dieser Fehler wurde ab GCC 3.4.6
behoben.
Ich hatte dieses Problem bei der Verwendung von GCC 3.3.1
mit binutils 2.15.92
und binutils 2.17.50
und beide haben nicht funktioniert. Also, für mich war es eindeutig nicht die Mischung aus GCC
und binutils
Versionen, die das Problem machten.
Wenn Sie eine ältere GCC
-Version verwenden müssen, können Sie diesen von H.J.
bereitgestellten Patch manuell verwenden und dann Ihre alte GCC
erneut erstellen.
Überprüfen Sie die Anhänge in den bereitgestellten Links, die den genauen Unterschied für den Fix zeigen.
Ich habe es selbst gemacht und es getestet und es hat erfolgreich funktioniert, patchen GCC 3.3.1
mit dem ersten Fix "ohne COMDAT-Gruppe", neu erstellt und verwendet es mit binutils 2.15.92
und binutils 2.17.50
.
Tags und Links gcc linker-errors binutils