Forum: PC-Programmierung .a Library mit verschiedenen gcc Versionen


von H. K. (spearfish)


Lesenswert?

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
von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Schau man auf die Symbole in den Bibliotheken.  Verwenden die 
unterschiedliche Konventionen, etwa was Leading Underscores angeht?

von meow (Gast)


Lesenswert?

.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.

von Jay (Gast)


Lesenswert?

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?

von H. K. (spearfish)


Lesenswert?

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
Noch kein Account? Hier anmelden.