apt:重定位错误:libstdc ++。so.6文件中未定义版本GLIBCXX_3.4.21,具有链接时间参考


63

由于尝试升级到16.04 Xenial,我得到了

$ apt
apt: 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

当简单地运行的时候apt。不用说,这使得做任何事情都很困难。

有什么提示吗?


哇……这让我真的不信任Ubuntu / Canonical的升级过程。每当我有一个运行正常但过时的版本时,帮助论坛中的某人会告诉我升级将解决我的所有问题……我不知道“暂存盘”是什么,当然也不想中断GRUB调试工作…
同构

Answers:


55

我有同样的问题,这是由PPA for Ubuntu工具链引起的。因此,我的计算机无法启动。在@ w00kie对他的回答发表评论之后,我从tty终端(从tty终端)下载了链接的https://packages.ubuntu.com/xenial/libstdc++6的debian软件包libstdc++6,并使用进行了安装。现在计算机运行正常。Xenialdpkg -i

脚步

wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb
sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb

# I also found this helpful
sudo apt-get -f install

5
您可以逐步输入命令吗?我一点都不熟悉,我的linux机器令人垂涎……
Zachary Fields,

@Zachary您面临的确切问题是什么?你能开机吗?
萨加尔贾(Sagar Jha)

1
并不是的。如果我松开它,屏幕闪烁约15分钟,那么我会得到一个tty2终端提示,其颜色非常浅。我无法使用apt(或任何工具)。我什至尝试libstdc++6...deb从可启动的USB驱动器下载,手动放置软件包,重新启动到损坏的系统并安装.debusing sudo dpkg -i libstdc++6...deb,但它甚至不知道是什么dpkg
Zachary Fields

13
要下载/安装.deb文件,您可以执行以下操作:wget http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb然后下载dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.2_amd64.deb(假设是64位系统)。对我而言,我的互联网连接无法正常工作,因此我将其从另一台计算机下载到USB驱动器上,然后不得不将USB驱动器手动安装到有问题的计算机上(sudo mount /dev/sdc1 /media/usbsdc1插入USB后立即查看终端输出即可找到USB驱动器)然后运行上面的dpkg命令。
加勒特

7
我不得不使用dpkg --force-all -i libstdc+‌​+6_5.4.0-6ubuntu1~16‌​.04.2_amd64.deb它来进行安装
virtualxtc

26

罪魁祸首是PPA的Ubuntu Toolchain Uploads(受限制的)残留物,特别是

/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22

有两种解决方法:

  • 您已经ppa-purge安装了。然后

    sudo ppa-purge ppa:ubuntu-toolchain-r/test
    

    解决问题。

  • 通过下载Xenial的libstdc ++ 6并通过进行安装来覆盖libstc ++ dpkg -i


4
至少对我而言,此操作失败,并显示与问题中相同的消息...
mbdevpl,2016年

1
应该用下面的答案来扩展,因为显然ppa-purge不起作用(相同的python)
user64204 2016年

1
我得到:sudo: ppa-purge: command not found
加勒特

@Garrettsudo apt install ppa-purge
NicoSchlömer,2016年

3
@NicoSchlömer,谢谢,但是实际上,我相信我apt也没有工作(按照原始帖子)。
加勒特

8

由于此错误,我的comp无法正确启动。Apt-get无法正常工作,Gnome也无法正常工作。从14.04升级到16.04后,这是立即发生的。我通过输入tty解决了它

sudo apt-add-repository --remove ppa:ubuntu-toolchain-r/test

此时,apt-get它又开始工作了,我能够从那里修复所有问题:

sudo apt-get clean
sudo apt-get update
sudo apt-get install -f
sudo dpkg -a --configure
sudo apt-get dist-upgrade

我还必须卸载Virtualbox(在update命令之后),然后稍后重新安装,但我认为这无关紧要。


2
我尝试了此操作,但在apt_pkg软件包上遇到了导入错误
Mixone

Mixone,确切的错误是什么,确切地在哪个命令上?
Matjaz

sudo apt-get update错误我来自python后端,我猜想,stacktrace是python,它基本上说找不到模块apt_pkg
Mixone

5
我也遇到同样的问题,尝试apt-add-repository在您的答案中使用命令会给出: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 the file libstdc++.so.6 with link time reference
Garrett

对于像我这样的白痴,他们试图在发布2年后进行升级,并认为所有错误均已修复。上面评论中的链接已损坏。这是新的。 http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_amd64.deb(或i386两者兼而有之),不要介意dpkg诅咒您。这样做--auto--deconfigureapt-get尽管有错误消息,您的之后也会回到正轨。您将可以使用正确的-f --install+ 结束,--upgrade然后重新启动到新系统。
Ufos '18年

4

我一直认为问题是我独有的,并且是由下载错误引起的。

讨论为我提供了所需的线索。基本上,所需要做的就是用故障系统的/ usr / lib / x86_64-linux-gnu中的libstdc ++。so.6.0.21替换libstdc ++。so.6.0.22。(似乎新版本中存在错误。)

这可以通过拇指驱动器完成,或者就我而言,可以从暂存盘完成。

有关详细信息,请访问:https : //answers.launchpad.net/ubuntu/+question/395832

谢谢大家...


我使用了这个技巧,但是在一些备用空间上做了双重引导。我能够轻松地挂载原始分区。这很容易。
安德鲁(Andrew)

太棒了-这3条命令对我有用:cd / usr / lib / x86_64-linux-gnu / >>> sudo rm libstdc ++。so.6 >>> sudo ln -s libstdc ++。so.6.0.21 libstdc ++。so.6
奥斯曼

3

按照dpkg -i接受的答案中的方法,我的14.04-> 16.04升级不需要一个软件包,而是两个软件包:

gcc-5-base_5.4.0-6ubuntu1~16.04.4_i386.deb
libstdc++6_5.4.0-6ubuntu1~16.04.4_i386.deb

之后,apt upgrade便可以下载其余软件包并完成安装。


2

如果您在Yakkety上与Snappy一起安装了最新版本的'conjure-up'快照,则您的apt将被破坏,并显示一个非常类似的错误:

apt: relocation error: /usr/lib/x86_64-linux-gnu/libapt-private.so.0.0: symbol _ZN13pkgSourceList16AddVolatileFilesER11CommandLinePSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EE, version APTPKG_5.0 not defined in file libapt-pkg.so.5.0 with link time reference

由于此错误:

https://bugs.launchpad.net/snappy/+bug/1a677417

目前,我所知道的唯一解决方法是删除变调快照(如果您之前安装了快照,则可以将快照“快照恢复”到以前的版本)。


1

对我有用的解决方法是实际添加Ubuntu工具链ppa:

sudo apt-add-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -f
sudo apt-get upgrade

0

您应该可以通过键入以下内容来修复它:

sudo apt-get -f安装

没有指定任何包装。它应该做的工作。


0

i386系统可能存在非常相似的问题。

为了解决该问题,我还必须将gcc-5-base从Version降级5.4.1-2ubuntu1~12.045.4.0-6ubuntu1~16.04.4

为了完成到合理配置系统的升级,我还必须使用dpkg --purge on vituoso_nepomuk和virtualbox来摆脱它们的配置文件,这些配置文件会引起麻烦(对我来说,VirtualBox是由virtualbox-5.1软件包提供的,升级似乎毫发无损。 )

关键是dpkg --configure dbus要上班。

要在tty类型的屏幕中启用wget,用户可能还需要执行sudo dhclient eth0以启用有线以太网连接。


0

在Linux上升级ubuntu发行版时,我遇到了这个问题:

# ls /usr/lib/x86_64-linux-gnu/libstdc++.so.6*
libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21
libstdc++.so.6cd -> libstdc++.so.6.0.20*

libstdc ++。so.6-> libstdc ++。so.6cd-> libstdc ++。so.6.0.20

但是有两个文件:libstdc ++。so.6.0.21和libstdc ++。so.6.0.20

我已将符号链接更改为指向最新版本的libstdc ++。so.6.0.21

cd /usr/lib/x86_64-linux-gnu
rm libstdc++.so.6cd
chmod +x libstdc++.so.6.0.21
ln -s  libstdc++.so.6.0.21 libstdc++.so.6cd

结果:

libstdc++.so.6 -> libstdc++.so.6cd*
libstdc++.so.6.0.20*
libstdc++.so.6.0.21*
libstdc++.so.6cd -> libstdc++.so.6.0.21*

一切恢复正常


0
  1. 从Ubuntu软件包管理器网站为您的ubuntu下载libstdc ++ 6。(用于uname -a查找硬件和软件架构)。

  2. sudo dpkg --install --auto-deconfigure libstdc++6...deb
    
  3. 重启。Ubuntu应该启动,但是apt不会安装新软件包。

  4. 要修复依赖关系并使系统更新,请运行以下命令

    sudo apt-add-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install -f
    sudo apt-get upgrade
    sudo apt-get dist-upgrade
    sudo apt-get autoclean && sudo apt-get autoremove  
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.