Hallo! Kann es sein, dass .a Bibliotheken von verschiedenen Versionen von gcc nicht miteinander kompatibel sind? Habe eine Anwendung, welche gegen eine (proprietäre) Bibliothek gelinked wird. Auf dem einen Rechner unter MinGW mit gcc Version 3.2.3 funktioniert es. Versuche ich es auf einem anderen Rechner unter MinGW mit gcc Version 4.8.1, so bekomme ich zu allen Funktionsaufrufen aus der Bibliothek "undefined reference"... selbes Makefile und Sourcecode. Habe es auch unter eine Cygwinumgebung mit gcc 4.9 probiert und auch "undefined references" bekommen. Habe jetzt dann einfach die MinGW-Umgebung vom alten Rechner auf den neuen Rechner kopiert (also die mit gcc 3.2.3) und so funktioniert es. Leider habe ich die Bibliothek nur als binäre Bibliothek mit Headerdatei vorliegen, neu kompilieren geht also nicht. Danke für jede Hilfe!
:
Bearbeitet durch User
Schau man auf die Symbole in den Bibliotheken. Verwenden die unterschiedliche Konventionen, etwa was Leading Underscores angeht?
.a ist eine statische Library schätze ich? Du kannst nicht von Binärkompatibilität ausgehen, wenn du den die Library verwendenden Code mit einem Compiler einer anderen Version kompilierst. Wenns hier um C++ geht, spielt natürlich auch das name-mangling eine Rolle, das ist aber hier das kleinere Problem.
Reden wir von C oder C++ Programmen und Bibliotheken? Bei C++ hat sich das ABI zwischen 3.2 und 4.8 geändert, angeblich kompatibel, aber bei G++ weiß man nie so genau. Du könntest versuchen deinen Code mit -fabi-version=1 zu compilieren. Vielleicht hilft es. Bei C sollte sich das ABI nicht geändert haben und dem Microsoft C ABI entsprechen. Wenn es eine reine C-Bibliothek ist, die sich nicht linke lässt, würde ich einen Fehler in einem der Compiler oder Linker vermuten. Vielleicht MinGW nochmal neu bauen oder aus einer vertrauenswürdigen Quelle installieren?
Hallo! Sonderbarerweise hat sich der Fehler heute in Luft aufgelöst und es funktioniert auch mit den neuen gcc Versionen. Sehr komisch das ganze... Aber danke trotzdem für eure Hilfe.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.