0

Réparer pacman : error while loading shared libraries: libstdc++.so.6

Suite à un problème de mise à jour de ma Manjaro, j’ai cassé les gestionaire de paquet pacman.

Mon problème initial :

sudo pacman -Su
:: Début de la mise à jour complète du système...
résolution des dépendances...
recherche des conflits entre paquets...
avertissement : supprime « gcc-libs » de la liste de cible car il est en conflit avec « gcc-libs-multilib »
erreur : la préparation de la transaction a échoué (la satisfaction des dépendances a échoué)
:: gcc : requiert gcc-libs=7.1.1-2

Impossible de mettre à jour mon système. Après quelques recherche sur le web, je suis tombé sur cet article : https://bbs.archlinux.org/viewtopic.php?id=226723 et j’ai suivie le dernier message.

Allez, j’ouvre mon terminal et j’exécute la première commande sans réfléchir :

pacman -Rdd gcc-libs-multilib

Et là survient le drame, car oui cela m’a bien supprimé le paquet gcc-libs-multilib mais ça m’a cassé pacman ! Du coup, impossible de suivre les étapes de l’article cité précédemment et je me retrouve avec un nouveau problème :
pacman: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Analysons les options -Rdd :

  • -R : cette option est utlisé pour supprimer simplement un paquet.
  • dd : cette option signifie à pacman d’ignorer tous les contrôles de dépendance (un seul d permet d’ignorer les vérifications de la version de la dépendance)

Donc pour résumer, j’ai demandé à pacman de supprimer le paquet gcc-libs-multilib en ignorant toutes les dépendances, ce qui est très très risqué !!! La preuve, j’ai cassé pacman et tous les autres paquets qui sont liés à cette dépendance…

Bref, voici comment j’ai réussi à réparer pacman :

  • Ouvrir firefox et télécharger la librairie à cette adresse (pas possible d’utiliser wget car cassé) : https://www.archlinux.org/packages/core/x86_64/gcc-libs/
  • Aller dans le répertoire où a été téléchargée l’archive :
  • cd ~/Téléchargements/
  • Créer un répertoire temporaire, exemple gcc :
  • mkdir gcc
  • Déplacer l’archive dans ce répertoire :
  • mv gcc-libs-7.1.1-2-x86_64.pkg.tar.xz gcc/
  • Aller dans ce répertoire :
  • cd gcc/
  • Décompresser l’archive :
  • xz -d gcc-libs-7.1.1-2-x86_64.pkg.tar.xz
    tar -xvf gcc-libs-7.1.1-2-x86_64.pkg.tar
    
  • Aller dans le répertoire usr/lib/ créé dans le répertoire courant :
  • cd usr/lib/
  • Copier les librairies libstdc++.so.6 libgcc_s.so libgcc_s.so.1 dans /usr/lib/ :
  • sudo cp libstdc++.so.6 /usr/lib/libstdc++.so.6
    sudo cp libgcc_s.so /usr/lib/libgcc_s.so
    sudo cp libgcc_s.so.1 /usr/lib/libgcc_s.so.1
    
  • Enfin pour effectuer la mise à jour de mon système et reconstruire toutes les dépendances, il faut installer le paquet gcc-libs avec l’option --force :
  • sudo pacman -S --force gcc-libs

Moralité de cette histoire, faire très attention et ne pas copier bêtement des lignes de commandes trouvées sur des forums ou articles de blog (comme le mien) sans réfléchir à deux fois :-)

Sinon, pour résoudre le problème initial de la mise à jour du système lié à la version de gcc, il faut simplement installer le paquet gcc-fortran :

sudo pacman -S gcc-fortran

Ensuite faire la mise à jour :

sudo pacman -Su

Partager l'article :





fred

Administrateur Système autodidacte et utilisateur au quotidien de GNU/Linux (Debian, Ubuntu, Manjaro et un peu de CentOS).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *