67 votes

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

Depuis que j'ai essayé de mettre à jour vers 16.04 xenial, j'obtiens

$ 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

lorsqu'il s'agit simplement d'exécuter apt . Inutile de dire qu'il est alors difficile de faire quoi que ce soit.

Des conseils ?

0voto

Fábio Rizzi Points 1

Je viens de rencontrer ce problème lors de la mise à jour 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.20

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

J'ai modifié le lien symbolique pour pointer vers la dernière version 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ésultat :

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

0voto

Ruslan Points 1323

Après avoir installé libstdc++6_5.4.0-6ubuntu1~16.04.12_amd64.deb comme mentionné dans le réponse de Sagar Jha (cette version plus récente est actuellement pertinente) via dpkg --force-all -i THE_FILENAME.deb j'avais des dépendances de paquets cassées d'une manière qui apt-get -f install n'a pas pu être réparé. Mais apt lui-même fonctionne maintenant. Donc, pour remettre mon système en état de marche, j'ai dû installer explicitement les versions spécifiques de tous les paquets cassés du ppa toolchain-r, comme ici :

sudo apt install {gcc-5-base,cpp-5,g++-5,gcc-5,libasan2,libgcc-5-dev,libstdc++-5-dev,libmpx0}=5.4.0-6ubuntu1~16.04.12

Cela laisse donc apt déclasser et enfin mener le système de paquets à un état cohérent.

0voto

Jungwon Choi Points 1

La seule chose que vous devez faire est de copier /usr/lib/x86_64-linux-gnu/libstdc++.so.6 à partir de l'ubuntu 16.04 normal. C'est le moyen le plus simple.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X