web-dev-qa-db-fra.com

apt: erreur de relocalisation: la version de GLIBCXX_3.4.21 n'est pas définie dans le fichier libstdc ++. so.6 avec la référence de temps de liaison

Depuis que j'essaie de passer à 16.04 xenial, je reçois

$ apt
apt: 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

lorsque vous exécutez simplement apt. Inutile de dire que cela rend la tâche difficile.

Des allusions?

61
Nico Schlömer

Les coupables sont des restes de PPA pour Ubuntu Toolchain Uploads (restricted) , en particulier

/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22

Il y a deux possibilités pour traiter ceci:

  • Vous avez déjà installé ppa-purge. ensuite

    Sudo ppa-purge ppa:ubuntu-toolchain-r/test
    

    résout les problèmes.

  • Remplacez libstc ++ en téléchargeant libstdc ++ 6 pour Xenial et en l'installant via dpkg -i.

25
Nico Schlömer

J'ai eu le même problème causé par des problèmes de PPA pour la chaîne d'outils Ubuntu. Mon ordinateur ne veut pas démarrer à cause de cela. Après le commentaire de @ w00kie sur sa réponse, j'ai téléchargé (depuis le terminal tty) le fichier debian du paquet libstdc++6 pour Xenial sur link https://packages.ubuntu.com/xenial/libstdc++6 et installé à l'aide dpkg -i. L'ordinateur fonctionne très bien maintenant.

Pas

wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_AMD64.deb
Sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.10_AMD64.deb

# I also found this helpful
Sudo apt-get -f install
53
Sagar Jha

Ma comp n'a pas pu démarrer correctement à cause de cette erreur. Apt-get ne fonctionnait pas, pas plus que Gnome. C'était immédiatement après une mise à niveau de 14.04 à 16.04. Je l'ai résolu en tty en entrant

Sudo apt-add-repository --remove ppa:ubuntu-toolchain-r/test

À ce stade, apt-get a recommencé à fonctionner et j'ai pu résoudre tous les problèmes à partir de là:

Sudo apt-get clean
Sudo apt-get update
Sudo apt-get install -f
Sudo dpkg -a --configure
Sudo apt-get dist-upgrade

J'ai également dû désinstaller Virtualbox (après la commande de mise à jour) et le rétablir plus tard, mais je pense que cela n'avait aucun rapport.

8
Matjaz

Je pensais que le problème était unique en mon genre et qu'il était dû à une erreur de téléchargement.

Cette discussion m'a donné l'indice dont j'avais besoin. Fondamentalement, tout ce dont nous avions besoin était de remplacer libstdc ++. So.6.0.22 par libstdc ++. So.6.0.21 dans/usr/lib/x86_64-linux-gnu du système défaillant. (Il semble y avoir une erreur dans la nouvelle version.)

Cela peut être fait à partir d'une clé USB ou, comme dans mon cas, à partir d'un disque de travail.

Tous les détails sur: https://answers.launchpad.net/ubuntu/+question/395832

Merci à tous...

4
SteelTrap

Suivant l'approche dpkg -i dans la réponse acceptée, ma mise à niveau de 14.04-> 16.04 ne nécessitait pas un mais deux packages:

gcc-5-base_5.4.0-6ubuntu1~16.04.4_i386.deb
libstdc++6_5.4.0-6ubuntu1~16.04.4_i386.deb

Ensuite, apt upgrade a été en mesure de télécharger les packages restants et de terminer l’installation.

3
user1905416

Si vous avez la dernière version du composant logiciel enfichable 'conjure-up' installée avec Snappy sur Yakkety, votre apt sera cassé avec une erreur très similaire:

apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-private.so.0.0: symbol _ZN13pkgSourceList16AddVolatileFilesER11CommandLinePSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE, version APTPKG_5.0 not defined in file libapt-pkg.so.5.0 with link time reference

à cause de ce bug:

https://bugs.launchpad.net/snappy/+bug/1a677417

À l'heure actuelle, la seule solution que je connaisse est la suppression du composant logiciel enfichable de conjure-up (ou éventuellement, le 'remplacement du composant logiciel enfichable' par une version précédente si vous en aviez déjà installé une auparavant).

2
Ivy

La solution qui a fonctionné pour moi a été d’ajouter la chaîne d’outils Ubuntu:

Sudo apt-add-repository ppa:ubuntu-toolchain-r/test
Sudo apt-get update
Sudo apt-get install -f
Sudo apt-get upgrade
1
Christopher Roberts
  1. Téléchargez libstdc ++ 6 pour votre ubuntu à partir du site Web du gestionnaire de paquets Ubuntu. (utilisez uname -a pour trouver l’architecture h/w et s/w).

  2. Courir

    Sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. Redémarrez. Ubuntu devrait démarrer mais apt n’installe pas de nouveaux paquets.

  4. Pour réparer les dépendances et mettre le système à jour, exécutez ces commandes

    Sudo apt-add-repository ppa:ubuntu-toolchain-r/test
    Sudo apt-get update
    Sudo apt-get install -f
    Sudo apt-get upgrade
    Sudo apt-get dist-upgrade
    Sudo apt-get autoclean && Sudo apt-get autoremove  
    
0
Vormos Zuke

Vous devriez pouvoir le réparer en tapant:

Sudo apt-get -f install

sans spécifier aucun paquet. Il devrait faire le travail.

0
biljkus

Il peut y avoir un problème très similaire avec les systèmes i386.

Pour résoudre ce problème, je devais également rétrograder gcc-5-base de la version 5.4.1-2ubuntu1~12.04 en 5.4.0-6ubuntu1~16.04.4.

Pour terminer la mise à niveau vers un système à l'apparence raisonnable, j'ai également dû utiliser dpkg --purge on vituoso_nepomuk et virtualbox pour supprimer leurs fichiers de configuration, ce qui posait problème (pour moi, VirtualBox est fourni par le paquet virtualbox-5.1, qui semble indemne de la mise à niveau. .)

La clé était d’obtenir dpkg --configure dbus au travail.

Pour activer wget dans un écran de type tty, les utilisateurs doivent également exécuter Sudo dhclient eth0 pour activer une connexion Ethernet câblée.

0
Richard Wordingham

Je viens d'avoir ce problème lors de la mise à niveau de la distribution Ubuntu sur Linux, j'ai vu que:

# ls /usr/lib/x86_64-linux-gnu/libstdc++.so.6*
libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21
libstdc++.so.6cd -> libstdc++.so.6.0.20*

libstdc ++. so.6 -> libstdc ++. so.6cd -> libstdc ++. so.6.0.2

Mais il y avait deux fichiers: libstdc ++. So.6.0.21 et libstdc ++. So.6.0.20

J'ai changé le lien symbolique pour qu'il pointe vers la dernière version de libstdc ++. So.6.0.21

cd /usr/lib/x86_64-linux-gnu
rm libstdc++.so.6cd
chmod +x libstdc++.so.6.0.21
ln -s  libstdc++.so.6.0.21 libstdc++.so.6cd

Résultant:

libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21*
libstdc++.so.6cd -> libstdc++.so.6.0.21*

et tout est revenu à la normale

0
Fábio Ricci