检查磁盘上是否存在较新的 libstdc++

检查磁盘上是否存在较新的 libstdc++

我正在将 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可以在这里找到:

https://packages.ubuntu.com/bionic/libstdc++6

相关内容