如何修复损坏的 libstdc++6,它也会损坏 apt

如何修复损坏的 libstdc++6,它也会损坏 apt

gcc我似乎在过去的某个时候手动更新时搞砸了一些东西,直到今天我从 14.04 升级到 16.04 时才出现问题。也就是说,系统似乎认为libstdc++6版本没问题,而apt(和许多其他程序)却抱怨它不行(因为共享库实际上是错误的版本):

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

系统甚至没有启动图形模式,上述输出是使用非图形控制台(使用Ctrl-Alt-F6)获得的,并且apt本身完全无法使用,所以我不能只是做重新安装之类的事情。

当我用于管理这些包的程序本身受到影响并且无法使用时,我该如何修复并重新安装这些包?

答案1

起初,我可以通过手动复制来获得图形登录 shelllibstdc++.so.6.0.21从 Live USB 驱动器放入其位置,并从 创建一个指向它的链接libstdc++.so.6。我使用这个版本,因为它似乎是 Ubuntu 16.04 的默认版本,并且还包含错误消息中提到的“21”(“版本 GLIBCXX_3.4.21”)。

虽然这似乎满足了图形堆栈的要求,apt但其他依赖 libstdc++6 的程序仍然存在同样的错误。经过几次尝试,我可以使用以下步骤解决整个问题,并dpkg手动(卸载)安装一些东西:

  • 下载适合 16.04 的正确版本的 deb 文件:

    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
    
  • 删除此特定版本,阻止安装正确的 libstdc++6:

    sudo dpkg --force-depends -r libstdc++6:i386
    
  • 然后从文件中安装“好”的版本:

    sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
    
  • 最后,修复我在更新和尝试时留下的混乱:

    sudo apt-get install -f
    

相关内容