apt: ошибка перемещения: версия GLIBCXX_3.4.21 не определена в файле libstdc ++. so.6 с указанием времени ссылки

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отладкой. …
изоморфизм

Ответы:

55

У меня была такая же проблема, вызванная проблемами из PPA для Ubuntu toolchain. Мой компьютер не загружается из-за этого. После комментария @ w00kie к его ответу я скачал (с терминала tty) пакет debian для пакета libstdc++6по Xenialссылке https://packages.ubuntu.com/xenial/libstdc++6 и установил с помощью dpkg -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 С какой именно проблемой вы сталкиваетесь? Вы можете загрузиться?
Сагар Джа
1
На самом деле, нет. Если я отпущу его, экран мерцает около 15 минут, то я получаю приглашение терминала tty2 очень светло-серого цвета. Я не могу использовать apt(или любой инструмент на самом деле). Я даже пытался загрузить libstdc++6...debс загрузочного USB-накопителя, вручную поместить пакет, перезагрузиться в сломанную систему и установить .debиспользование sudo dpkg -i libstdc++6...deb, но он даже не знает, что это dpkgтакое.
Захари Филдс
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/usbгде это sdc1было обнаружено путем просмотра вывода терминала сразу после подключения USB). и затем выполните приведенную выше dpkgкоманду.
Гарретт
7
Я должен был использовать это, dpkg --force-all -i libstdc+‌​+6_5.4.0-6ubuntu1~16‌​.04.2_amd64.debчтобы установить это
virtualxtc
26

Виновником являются остатки от PPA для загрузок Ubuntu Toolchain (ограничено) , в частности

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

Есть две возможности справиться с этим:

  • Вы уже ppa-purgeустановили. затем

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

    исправляет проблемы.

  • Переопределите libstc ++, загрузив libstdc ++ 6 для Xenial и установив его через dpkg -i.

Нико Шлёмер
источник
4
По крайней мере, для меня это не получается с сообщением, идентичным сообщению в вопросе ...
mbdevpl
1
Вероятно, следует расширить ответами снизу, потому что, очевидно ppa-purge, не будет работать (тот же Python)
user64204
1
Я получаю:sudo: ppa-purge: command not found
Гарретт
@Garrettsudo apt install ppa-purge
Нико Шломер
3
@ NicoSchlömer, спасибо, но на самом деле я считаю, что мой aptтоже не работал (согласно оригинальному сообщению).
Гарретт
8

Мой комп не загрузился правильно из-за этой ошибки. 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 (после команды обновления) и переустановить его позже, но я думаю, что это не было связано.

Matjaz
источник
2
я попробовал это, но получил ошибку импорта пакета apt_pkg
Mixone
Mixone, какая была точная ошибка и по какой именно команде?
Матяз
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--deconfigureи вы apt-getвернетесь на ходу, несмотря на сообщения об ошибках. И вы сможете закончить с правильным -f --install+ --upgradeи перезагрузиться в новую систему.
Ufos
4

Я думал, что проблема была чем-то уникальным для меня и была вызвана ошибкой загрузки.

Это обсуждение дало мне подсказку, в которой я нуждался. По сути, все, что нужно, это заменить libstdc ++. So.6.0.22 на libstdc ++. So.6.0.21 в / usr / lib / x86_64-linux-gnu отказавшей системы. (Кажется, есть ошибка в более новой версии.)

Это можно сделать с флешки или, как в моем случае, с нуля.

Полная информация по адресу: https://answers.launchpad.net/ubuntu/+question/395832

Спасибо всем...

SteelTrap
источник
Я использовал этот трюк, но сделал двойную загрузку на свободном месте. Я был в состоянии легко смонтировать оригинальный раздел. Это было довольно легко.
Андрей
Удивительно - эти 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удалось загрузить остальные пакеты и завершить установку.

user1905416
источник
2

Если у вас установлена ​​последняя версия оснастки «Заклинание» с Snappy на Yakkety, ваш 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

Исправление, которое работало для меня, состояло в том, чтобы фактически добавить ppa цепочки инструментов Ubuntu:

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 установить

без указания какого-либо пакета. Это должно сделать работу.

biljkus
источник
0

С системами i386 может быть очень похожая проблема.

Чтобы решить эту проблему, мне также пришлось понизить версию gcc-5-base с версии 5.4.1-2ubuntu1~12.04до 5.4.0-6ubuntu1~16.04.4.

Чтобы завершить обновление до приемлемой системы, мне также пришлось использовать dpkg --purge on vituoso_nepomukи virtualbox, чтобы избавиться от их файлов конфигурации, которые вызывали проблемы (для меня VirtualBox поставляется с пакетом virtualbox-5.1, который кажется невредимым при обновлении. )

Ключ должен был добраться dpkg --configure dbusдо работы.

Чтобы включить wget на экране tty-типа, пользователям также может потребоваться выполнить sudo dhclient eth0включение сетевого подключения.

Ричард Уордингем
источник
0

У меня только что была эта проблема при обновлении дистрибутива Ubuntu на Linux, я увидел это:

# 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. Загрузите libstdc ++ 6 для вашей Ubuntu с веб-сайта менеджера пакетов Ubuntu. (используйте, uname -aчтобы найти архитектуру h / w и s / w).

  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  
    
Вормос Зуке
источник