.a Library mit verschiedenen gcc Versionen

OP #4421100
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!
Gast #4422244
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.
Gast #4422294
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren