Error Gebäude gcc 4.8.3 von Quelle: libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
Ich 'm mit gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010 für das kompilieren aber ich habe auch versucht, gcc-4.1.2 und ich bekomme den gleichen Fehler.
für gcc 5.2.1
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6|grep CXXABI gibt
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_1.3.9
CXXABI_TM_1
CXXABI_FLOAT128
Für den compiler kompilierten gcc 4.8.3
strings gcc-build/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6|grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_TM_1
CXXABI_1.3
CXXABI_1.3.2
CXXABI_1.3.6
CXXABI_1.3.1
CXXABI_1.3.5
CXXABI_1.3.4
CXXABI_TM_1
CXXABI_1.3.7
CXXABI_1.3.3
ich.e no 1.3.8
vor der Ausführung des configure-und make-ich habe auch versucht:
export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH
../gcc-4.8.3/configure --build=x86_64-linux-gnu
make
Fehlermeldung:
msgfmt -o fr.mo ../../../../gcc-4.8.3/libstdc++-v3/po/fr.po
msgfmt: gcc-build/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
msgfmt: Makefile:460: recipe for target 'de.mo' failed
Beim kompilieren mit gcc-4.1.2 bekomme ich den gleichen Fehler:
msgfmt -o fr.mo ../../../../libstdc++-v3/po/fr.po
gcc-build/gcc-4.8.3/build/x86_64-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
Makefile:460: recipe for target 'de.mo' failed
Beim kompilieren mit gcc-4.1.2 habe ich Folgendes vor zu konfigurieren und machen
#where libraries i have compiled with gcc 4.1.2 are located i.e
export LD_LIBRARY_PATH=/opt/devtools/gcc-4.1.2/lib
#where libstdc++.so.6 is
export LIBRARY_PATH=/opt/gcc-4.1.2/lib64
strings /opt/gcc-4.1.2/lib64/libstdc++.so.6|grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.1
CXXABI_1.3
was mich Wundern lässt, wo CXXABI_1.3.8 kommt. Ich habe auch ein 'make distclean' zwischen dem ändern von compiler
- So haben Sie eine Bibliothek oder eine solche, dass die eine neuere version des C++ - Bibliothek, als der compiler, den Sie verbinden mit unterstützen. Kompilieren Sie das gesamte Projekt mit dem älteren compiler, sollte es lösen.
- Einige header-Datei (oder Objekt-Datei), die Sie verwenden, wird eine Anforderung für eine neuere C++ - Bibliothek. Ich bin mir nicht sicher, welche weiteren Informationen Sie benötigen, um dieses problem zu beheben, aber im Grunde genommen, müssen Sie fixieren Sie Ihre build-Umgebung, so dass Sie die relevanten C++ - Bibliothek... Sie möglicherweise in der Lage, neu zu erstellen
/usr/lib/x86_64-linux-gnu/libicuuc.so.55
mit einem anderen compiler, vielleicht? - Beachten Sie, dass die C++ - Bibliothek, die mit einem speziellen compiler-version unterstützt eine bestimmte C++ - ABI-version, so mischen Verwendung von Compilern wird diese Art von Fehler.
- Vielen Dank für Eure Hilfe. Gebäude libicuuc.so.55 mit gcc 4.1.2 und dann den Aufbau der gcc ist mein problem gelöst
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, dieses problem tritt auf, wenn eine Bibliothek, die gebaut wurde, mit einer neueren compiler ist verknüpft mit einer älteren version von C++ - Bibliothek, oder manchmal, wenn eine neuere headerfile verwendet wird, um zu kompilieren etwas, dann links zu einer älteren C++ - Bibliothek.
Ist es auch möglich, sich mit einem ähnlichen problem beim verschieben von Binär-Dateien von einem system zum anderen, wenn das shared-libraries installiert, auf dem "neuen system" sind älter als diejenigen, auf die der code eingebaut wurde.
Gibt es in der Regel drei mögliche Lösungen:
1. Kompilieren Sie das säumige Bibliothek mit einem älteren compiler.
2. Installieren Sie eine newever version der C++ Bibliothek.
3. Neuerstellung der C++ - Bibliothek aus den Quellen (mit einer neuen genug-compiler).
Stieß ich auf das gleiche problem mit einem etwas neueren compiler-Kombination, d.h. mit gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609, beim Bau der GCC 4.8.5. Die Lösung funktioniert so weit anscheinend hat die Arbeit und gibt wertvolle Allgemeine Erklärung des Problems. Ich biete weitere details und eine alternative Lösung unten.
Die Fehlermeldung in Frage kommt von der
msgfmt
- Programm-ein Teil von gettext, eine Internationalisierung und Lokalisierung-system:msgfmt
aufgerufen wird, wird in der GCC-build-system zu kompilieren Nachrichten emited durch den C++ - standard-Bibliothek (libstdc++), das wird derzeit gebaut.msgfmt
ist eine dynamisch verknüpfte ausführbare Datei verknüpft (unter anderem) gegenlibicuuc.so.55
- ein cross-Plattform-Unicode-basiert Globalisierung Bibliothek:(andere Abhängigkeiten, die nicht gezeigt zur Klarheit)
Den icuuc Bibliothek ist eine dynamisch gelinkte shared object an sich selbst, dass hängt von der stdc++ - Bibliothek:
(andere Abhängigkeiten, die nicht gezeigt zur Klarheit)
Der obigen Liste wurde erstellt mit Hilfe von meinem interaktiven shell-Umgebung, die löst die Abhängigkeit von
libstdc++.so.6
an die system-weite version der C++ Bibliothek befindet sich in/usr/lib/x86_64-linux-gnu
. Aber den GCC-build-Umgebung anscheinend löst diese Abhängigkeit der C++ - Bibliothek, die auf dem früheren Stadium von der aktuellen build-Prozess, d.h., sich in$TOP_BUILD_DIR/x86_64-linux-gnu/libstdc++-v3/src/.libs
- man erinnere sich an das Zitat Fehlermeldung:Bekomme ich eine Recht ähnliche Ausgabe:
Nun, die Beantwortung der ursprünglichen Frage, die Zeichenfolge 'CXXABI_1.3.8 " kommt aus dem
libicuuc.so.55
Bibliothek, die verlangt, dass dielibstdc++.so.6
Bibliothek es hängt davon ab, bietet einen bestimmten ABI-version:Zusammenfassen, die GCC-build-system erzeugt eine zyklische Abhängigkeit, die Mixe-system-Breite-Binärdateien mit lokalen Bibliotheken:
durch die Lösung
libstdc++.so.6
es die eigene Bibliothek-Struktur anstelle der systemweiten version.Dem Vorschlag von Mats Petersson, die beinhaltet den Wiederaufbau der
libicuuc.so.55
Bibliothek, so dass es hängt davon ab, auf eine ältere version vonlibstdc++.so.6
, die (hoffentlich) kompatibel mit dem GCC-build-system, ist sicherlich gültig. Allerdings scheint es ein bisschen unnatürlich für meinen Geschmack, wie es erforderlich ist um das Spiel mit Abhängigkeiten eines Systems-wide binary, das außerhalb der Kontrolle einer nicht-root-Benutzer.Meine alternative Lösung beinhaltet den Aufbau der benutzerdefinierten version der gettext-Paket statt, so dass die
msgfmt
binary ist ein geschlossenes System und seine Abhängigkeiten nicht stören, mit der GCC-build-system. Es kann erreicht werden durch den Einbau der custom-version von gettext in/opt
und Anpassung der relevanten Pfade mit Umwelt-Module.msgfmt
durch Anpassung der env. Module?gettext
und stecken Sie dann das Modul in einer shell verwendet, um build-GCC. Wenn die Zeit kommt, in der das build-system rufen Sie Ihre eigene version vonmsgfmt
, die Sie vorsorglich zusammengestellt, z.B. als statisches binary, so Hebe das problem der inkompatiblen libstdc++ - ABIs.Ich hatte das gleiche problem, wenn ich versuchte, Sie zu bauen, GCC 4.8.5 aus dem Quellcode auf Ubuntu 16.04.3 LTS mit GCC-5.4.0.
Als workaround habe ich einfach fallen gelassen LD_LIBRARY_PATH nur für msgfmt Befehls in makefiles. Um genau zu sein, gebe ich die genauen Befehle habe ich ausgeführt, um die build erfolgreich:
1 - entpacken Sie die Quellen
2 - ändern call of msgfmt (add LD_LIBRARY_PATH= ) und stellen Sie sicher, es ist richtig
3 - konfigurieren (ich eingeschänkter multilib zu 64bit nur, weil ich nicht libc6-dev-i386 installiert auf meinem 64bit host und nicht wollen, tun es nur für diese zu bauen), bauen und installieren