web-dev-qa-db-fra.com

Comment réparer libstdc ++ 6, qui casse aussi apt

Il semble que j’ai confondu quelque chose avec une mise à jour manuelle gcc autrefois, ce qui n’est pas devenu un problème jusqu’à aujourd’hui, lorsque j’ai mis à niveau du 14.04 au 16.04. Notamment, le système semble penser que la version libstdc++6 est OK, tandis que apt (et de nombreux autres programmes) se plaignent que ce n'est pas le cas (car la bibliothèque partagée est en fait dans la mauvaise version):

Sudo apt-get install --fix-broken --fix-missing
apt-get: relocation error: /usr/lib/x86_64-linux-gnu/libapt-pkg.so.5.0: symbol _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

Le système ne démarre même pas en mode graphique, la sortie ci-dessus a été obtenue à l'aide d'une console non graphique (en utilisant Ctrl-Alt-F6), et apt lui-même est complètement inutilisable. Je ne peux donc rien faire. comme une réinstallation.

Comment puis-je réparer et réinstaller ces paquets, lorsque le programme que j'utilise pour les gérer lui-même est affecté et inutilisable?

6
phg

Au début, j’ai pu obtenir un shell de connexion graphique en copiant manuellement libstdc++.so.6.0.21 à sa place à partir d’une clé USB Live et en créant un lien à partir de _libstdc++.so.6_. J'ai utilisé cette version exacte car elle semble être la valeur par défaut pour Ubuntu 16.04 et contient également le "21" mentionné dans le message d'erreur ("version GLIBCXX_3.4.21").

Bien que cela semble satisfaire la pile graphique, les mêmes erreurs subsistent avec apt et d'autres programmes dépendant de libstdc ++ 6. Après quelques tentatives, je pourrais résoudre le problème en suivant les étapes suivantes, en utilisant dpkg pour installer (dés) installer manuellement les choses:

  • Téléchargez les fichiers deb dans les bonnes versions pour 16.04:

    _wget http://mirrors.kernel.org/ubuntu/pool/main/a/apt/apt_1.2.10ubuntu1_AMD64.deb http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.4_AMD64.deb
    _
  • Suppression de cette version spécifique, qui bloquait l’installation de la bonne libstdc ++ 6:

    _Sudo dpkg --force-depends -r libstdc++6:i386
    _
  • Puis installez la "bonne" version à partir des fichiers:

    _Sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_AMD64.deb apt_1.2.10ubuntu1_AMD64.deb
    _
  • Et enfin, corrigez les dégâts que j'ai laissés en mettant à jour et en essayant des choses:

    _Sudo apt-get install -f
    _
6
phg