GLIBCXX 3.4.15 auf Centos 6

8

Ich muss GLIBCXX 3.4.15 auf meiner Centos 6-Version installieren (um einen Server für ein Spiel auf Steam auszuführen). Ich habe herumgegoogelt und hatte mehrere Websites, auf denen Programme installiert wurden, auf denen der Fehler auftrat, dass 3.4.15 benötigt wurde ( LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found), aber sie haben nur einen Weg verwendet, um es zu umgehen / nicht zu installieren. Als ich das tat strings /usr/lib/libstdc++.so.6 | grep GLIBCXX, war dies die Ausgabe:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

Wie würde ich GLIBCXX 3.4.15 direkt auf Centos 6 installieren?

PMint
quelle

Antworten:

7

Ich würde dies als Hack betrachten, habe es aber öfter verwendet, als ich zugeben möchte, um Kompatibilitätsprobleme mit GLIBC zu umgehen, wie das, auf das Sie stoßen.

Der Hack beinhaltet das Erstellen eines Links, /usr/libder den Namen der Bibliothek enthält, die ein bestimmtes Tool haben möchte. Der Link zeigt dann auf den alternativen Namen der Bibliothek.

Beispiel

Angenommen, ich wollte einen Link zu erstellen libstdc++.so.6.

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Es klappt ungefähr so:

$ ln -s libstdc++.so.6 libstdc++.so.6.0.15

Überprüfen der Ergebnisse:

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6.0.15 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Ich bin mir jedoch nicht sicher, ob diese Methode funktioniert, da in Ihrer Bibliothek immer noch die Versionszeichenfolge fehlt GLIBCXX_3.4.15.

Wenn der Hack nicht erfolgreich ist , dann werden Sie wahrscheinlich die sauren Apfel beißen müssen und GLIBC in einem anderen Verzeichnis installieren, und dann außer Kraft gesetzt LD_LIBRARY_PATHoder LD_PRELOADso , dass die Ausführung von nur Dampf der modifizierten Bibliothek sieht.

Beispiel

$ LD_PRELOAD='mylibc.so anotherlib.so' program

Details dazu finden Sie hier in diesem SO Q & A: Mehrere glibc-Bibliotheken auf einem einzelnen Host .

slm
quelle
@ PMint - welche Methode hat bei Ihnen funktioniert?
slm
Sollte nicht die zweite ls, dritte Zeile sein libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium
@Sukminder - ja, danke für den Fang. Fest.
slm
2

Grundsätzlich ist die von CentOS (4.4.7) gelieferte Version des RPM-Pakets libstdc ++ nicht aktuell genug für Ihre Anwendung. CentOS bietet Langzeitstabilität anstelle der neuesten und besten Versionen. Das ist also nicht völlig unerwartet.

Fedora ist normalerweise ziemlich weit voraus und kann Ihren Server ohne Probleme ausführen.

Alternativ können Sie eine neuere Version von libstdc ++ aus einer aktuelleren Quelle erstellen. Ich würde die CentOS SPEC-Datei in gcc SRPM, der neuesten Version von gcc.gnu.org, starten und diese überarbeiten, um meine eigenen RPMs zu erstellen.

Upgrades von C-Bibliotheken waren in der Vergangenheit eine gute Möglichkeit, ein System auf unerwartete Weise zu beschädigen ...

HBruijn
quelle