2017-07-23 2 views
0

Ich habe GCC 7.1 auf meinem Rechner installiert und versucht, g++ darauf zu verwenden, aber es hat nicht funktioniert, das heißt:Arbeiten mit niedrigeren Version von GLIBC: Version `GLIBC_2.11` nicht gefunden (erforderlich durch g ++)

g++: /lib64/libc.so.6: version `GLIBC_2.11` not found (required by g++) 

So dann habe ich diese:

$ strings /lib64/lib.so.6 | grep GLIB 
GLIBC_2.2.5 
GLIBC_2.2.6 
GLIBC_2.3 
GLIBC_2.3.2 
GLIBC_2.3.3 
GLIBC_2.3.4 
GLIBC_2.4 
GLIBC_2.5 
GLIBC_PRIVATE 

$ strings `which g++` | grep GLIB 
GLIBC_2.3 
GLIBC_2.11 
GLIBC_2.2.5 

Zwei Dinge können hier zu beachten:

  • Der String GLIBC_2.11 ist für beide Ausgänge nicht üblich.
  • Jedoch ist GLIBC_2.3 beiden gemeinsam. Fragen

:

1. Was genau bedeuten diese Strings? Warum gibt es mehr als eine Saite in beiden? Was sagen sie uns?

2. Meine Vermutung ist, dass das Fehlen von GLIBC_2.11 in libc erklärt, warum g++ nicht funktioniert, wie g++ es erfordert (wie der Fehler sagt selbst). Allerdings bin ich verwirrt, was bedeutet die Anwesenheit von GLIBC_2.3 in beiden eigentlich? Bedeutet das, dass g++ angewiesen werden kann, dieses anstelle von zu verwenden? Wenn ja, wie genau? Was ist der Befehl?

+0

Das von Ihnen installierte gcc wurde für ein System gebaut, das einen neueren glibc als das, was auf Ihrem System ist, bietet. Es ist keine spaßige Art, den besseren Teil eines Wochenendes zu verbringen - Sie sind viel besser Sie können ein Paket finden, das auf Ihrem System funktioniert, oder gcc .7.1 von der Quelle auf Ihrem System erstellen. – nos

Antwort

4

GLIBC_2.3 und GLIBC_2.11 sind Symbolversionen. Der dynamische Linker verwendet sie, um beim Programmstart eine schnelle Überprüfung der Bibliothekskompatibilität durchzuführen: Das System glibc muss alle vom Programm referenzierten Symbolversionen bereitstellen. Ihr glibc ist anscheinend 2.5 (was zu Red Hat Enterprise Linux 5 passen würde). Dieser Version fehlen einige Funktionen, die in späteren Versionen hinzugefügt wurden, und es stellt sich heraus, dass die vorkompilierte GCC-Binärdatei, die Sie ausführen möchten, einige davon benötigt.

Um dies zu beheben, benötigen Sie eine speziell für Red Hat Enterprise Linux 5 kompilierte Version von GCC. Ich habe nicht versucht, wenn die aktuellen GCC-Upstream-Quellen mit dem System-Compiler erstellt werden, der zu dieser Zeit ziemlich alt ist (obwohl Upstream für genau solche Bedürfnisse immer noch an C++ 03 klebt). Einige libstdc++ Funktionen benötigen möglicherweise auch einen neueren Kernel als 2.6.18, und einige Sorgfalt ist notwendig, um die Kompatibilität zwischen dem neuen libstdc++ und dem mit dem System installierten zu erhalten.

Verwandte Themen