GLIBCXX 3.4.15 sur Centos 6


8

Je dois installer GLIBCXX 3.4.15 sur ma version Centos 6 (pour exécuter un serveur pour un jeu sur Steam). J'ai parcouru Google et j'ai eu plusieurs sites Web où ils ont installé des programmes où l'erreur est apparue où il a dit que 3.4.15 était nécessaire ( LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found), mais ils ont juste utilisé un moyen de le contourner / de ne pas l'installer. Quand je l'ai fait strings /usr/lib/libstdc++.so.6 | grep GLIBCXX, c'était la sortie:

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

Alors, comment installer directement GLIBCXX 3.4.15 sur Centos 6?

Réponses:


7

Je considérerais cela comme un hack mais je l'ai utilisé à plus d'occasions que je ne le reconnais pour contourner les problèmes de compatibilité avec GLIBC, comme celui que vous rencontrez.

Le hack consiste à créer un lien /usr/libcontenant le nom de la bibliothèque souhaitée par un outil particulier. Le lien pointe alors vers un autre nom de la bibliothèque.

Exemple

Disons que je voulais créer un lien vers 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

Cela fonctionne comme ceci:

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

Vérification des résultats:

$ 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

Mais je ne suis pas sûr cette méthode ne fonctionnera puisque vous êtes bibliothèque encore manquer la chaîne de version, GLIBCXX_3.4.15.

Si le piratage échoue, vous devrez probablement mordre la balle et installer GLIBC dans un répertoire alternatif, puis remplacer LD_LIBRARY_PATHou LD_PRELOADpour que l'exécution de juste Steam voit la bibliothèque modifiée.

Exemple

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

Les détails sur la façon de procéder sont couverts un peu plus ici dans ce SO Q&A: plusieurs bibliothèques glibc sur un seul hôte .


@PMint - quelle méthode a fonctionné pour vous?
slm

La deuxième ls, la troisième ligne ne devrait-elle pas l' être libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium

@Sukminder - oui, merci pour la capture. Fixé.
slm

2

Fondamentalement, la version du paquet libstdc ++ RPM livré par CentOS (4.4.7) n'est pas assez récente pour votre application. CentOS offre une stabilité à long terme au lieu des dernières et des meilleures versions, ce n'est donc pas complètement inattendu.

Fedora est normalement un peu en avance et peut exécuter votre serveur sans aucun problème.

Vous pouvez également créer une version plus récente de libstdc ++ à partir d'une source plus récente. Je voudrais démarrer le fichier CentOS SPEC dans le gcc SRPM, la dernière version de gcc.gnu.org et les retravailler pour créer mes propres RPM.

Les mises à niveau des bibliothèques C étaient par le passé un bon moyen de casser un système de manière inattendue ...


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.