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. Мій комп'ютер не завантажувався через це. Після коментаря @ w00kie щодо його відповіді я завантажив (з терміналу tty) debian of package 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 Fields

@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
Nico Schlömer

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 (після команди оновлення) та перевстановити його пізніше, але я думаю, що це не пов'язано.


2
Я спробував це, але отримав помилку при імпорті пакета apt_pkg
Mixone

Mixone, яка була точна помилка і в якій саме команді?
Матьяж

sudo apt-get update Помилка прийшла з бекенда python, я думаю, стек-трак був 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
Гаррет

Для таких ідіотів, як я, які намагаються оновити через 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

Дякую всім...


Я використав цей трюк, але зробив подвійне завантаження на деякому запасному просторі. Мені вдалося легко змонтувати оригінальну перегородку. Це було досить легко.
Андрій

Чудово - ці 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

Якщо у вас встановлена ​​найновіша версія оснащення 'conre-up' разом із Snappy на Yakkety, ваш підхід буде порушений з дуже схожою помилкою:

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

не вказуючи жодного пакета. Це має зробити свою роботу.


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щоб увімкнути дротове з'єднання Ethernet.


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  
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.