
Parece que cometí un error con una gcc
actualizació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++6
versió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 apt
en 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.21
en 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 apt
otros programas que dependen de libstdc++6. Después de intentarlo un poco, pude resolver todo el problema con los siguientes pasos, usando dpkg
para (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