Como consertar libstdc++6 quebrado, que também quebra o apt

Como consertar libstdc++6 quebrado, que também quebra o apt

Parece que estraguei alguma coisa com uma gccatualização manual em algum momento no passado, o que não se tornou um problema até hoje, quando atualizei de 14.04 para 16.04. Ou seja, o sistema parece pensar que a libstdc++6versão está OK, enquanto apt(e muitos outros programas) reclamam que não (porque a biblioteca compartilhada está na versão errada):

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

O sistema nem inicia o modo gráfico, a saída acima foi obtida usando um console não gráfico (usando Ctrl-Alt-F6) e apté completamente inutilizável, então não posso simplesmente fazer algo como reinstalar.

Como posso corrigir e reinstalar esses pacotes, quando o programa que estou usando para gerenciá-los está afetado e inutilizável?

Responder1

No início, consegui obter um shell de login gráfico copiando manualmentelibstdc++.so.6.0.21em seu lugar a partir de um pendrive Live USB e criando um link para ele a partir de libstdc++.so.6. Usei exatamente esta versão porque parece ser o padrão para Ubuntu 16.04 e também contém o "21" mencionado na mensagem de erro ("versão GLIBCXX_3.4.21").

Embora isso parecesse satisfazer a pilha de gráficos, os mesmos erros permaneceram em aptoutros programas que dependem do libstdc++6. Depois de algumas tentativas, consegui resolver tudo com os seguintes passos, usando dpkgpara (des)instalar manualmente as coisas:

  • Baixe os arquivos deb nas versões corretas para 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
    
  • Removendo esta versão específica, que bloqueava a instalação da libstdc++6 correta:

    sudo dpkg --force-depends -r libstdc++6:i386
    
  • Em seguida, instale a versão "boa" dos arquivos:

    sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
    
  • E, finalmente, conserte a bagunça que deixei enquanto atualizava e testava:

    sudo apt-get install -f
    

informação relacionada