Cómo reparar libstdc++6 roto, que también falla apt

Cómo reparar libstdc++6 roto, que también falla apt

Parece que cometí un error con una gccactualización manual en algún momento del pasado, lo que no se convirtió en un problema hasta hoy, cuando actualicé de 14.04 a 16.04. Es decir, el sistema parece pensar que la libstdc++6versión está bien, mientras apt(y muchos otros programas) se quejan de que no lo está (porque la biblioteca compartida en realidad está en la versión incorrecta):

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

El sistema ni siquiera inicia un modo gráfico, el resultado anterior se obtuvo usando una consola no gráfica (usando Ctrl-Alt-F6) y apten sí mismo es completamente inutilizable, por lo que no puedo simplemente hacer algo como una reinstalación.

¿Cómo puedo arreglar y reinstalar estos paquetes, cuando el programa que estoy usando para administrarlos está afectado y es inutilizable?

Respuesta1

Al principio, pude obtener un shell de inicio de sesión gráfico copiando manualmentelibstdc++.so.6.0.21en su lugar desde una memoria USB Live y creando un enlace desde libstdc++.so.6. Utilicé esta versión exacta porque parece ser la predeterminada para Ubuntu 16.04 y también contiene el "21" mencionado en el mensaje de error ("versión GLIBCXX_3.4.21").

Si bien esto pareció satisfacer la pila de gráficos, los mismos errores persistieron en aptotros programas que dependen de libstdc++6. Después de intentarlo un poco, pude resolver todo el problema con los siguientes pasos, usando dpkgpara (des)instalar cosas manualmente:

  • Descargue los archivos deb en las versiones correctas 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
    
  • Eliminando esta versión específica, que bloqueó la instalación de la libstdc++6 correcta:

    sudo dpkg --force-depends -r libstdc++6:i386
    
  • Luego instale la versión "buena" de los archivos:

    sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
    
  • Y finalmente, arregle el desorden que dejé mientras actualizaba y probaba cosas:

    sudo apt-get install -f
    

información relacionada