我正在将 Ubuntu 从 14.04 升级到 18.04。我运行了
$ sudo do-release-upgrade
它退出时出现与emacs
和相关的错误emacs24
。我删除了 和 的软件包dpkg
,现在我想完成版本升级。但是,当我尝试重新运行 时do-release-upgrade
,出现以下错误:
isaac@isaac-ThinkPad-T440s:~$ sudo do-release-upgrade
Traceback (most recent call last):
File "/usr/bin/do-release-upgrade", line 11, in <module>
from UpdateManager.Core.MetaRelease import MetaReleaseCore
File "/usr/lib/python3/dist-packages/UpdateManager/Core/MetaRelease.py", line 25, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ImportError: /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
apt
当我运行或 时,我遇到了类似的错误apt-get
,但dpkg
似乎没有问题。我该怎么办?
答案1
部分升级似乎引入了一些新代码,这些代码需要较新版本的 libstdc++ 存在。有两种解决方案可能适合您:
检查磁盘上是否存在较新的 libstdc++
$ ls -lh /usr/lib/x86_64-linux-gnu/libstdc++.*
> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.25
> /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
这表明在我的系统上只有一个libstdc++
-6.0.25
但对于您的系统可能有多个,最新的一个没有正确链接(这->
意味着它是一个符号链接)
您可以运行此命令来强制符号链接指向较新的链接:
sudo ln -s libstdc++.so.6.x.x libstdc++.so.6
6.x.x
用您拥有的最新版本进行替换。
手动下载 libstdc++
下载libstdc++6_8-20180414-1ubuntu2_amd64.deb并使用安装dpkg
wget 'https://mirrors.kernel.org/ubuntu/pool/main/g/gcc-8/libstdc++6_8-20180414-1ubuntu2_amd64.deb'
dpkg -i libstdc++6_8-20180414-1ubuntu2_amd64.deb
如果它抱怨它需要依赖项,则您需要对列为依赖项的所有包(,等)重复上述过程。libc6
它们gcc-8-base
可以在这里找到: