phi*_*ler 6 package-management apt dpkg dependencies
我似乎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
Run Code Online (Sandbox Code Playgroud)
系统甚至没有启动图形模式,上面的输出是使用非图形控制台(使用Ctrl-Alt-F6)获得的,并且apt本身完全无法使用,所以我不能只做重新安装之类的事情。
当我用于管理它们的程序本身受到影响且无法使用时,如何修复和重新安装这些软件包?
起初,我能够通过libstdc++.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
Run Code Online (Sandbox Code Playgroud)删除此特定版本,该版本阻止安装正确的 libstdc++6:
sudo dpkg --force-depends -r libstdc++6:i386
Run Code Online (Sandbox Code Playgroud)然后从文件安装“好”版本:
sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)最后,修复我在更新和尝试时留下的烂摊子:
sudo apt-get install -f
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
11829 次 |
| 最近记录: |