
Кажется, я что-то напутал с ручным gcc
обновлением когда-то в прошлом, и это не стало проблемой до сегодняшнего дня, когда я обновился с 14.04 до 16.04. А именно, система, похоже, думает, что версия libstdc++6
в порядке, в то время как apt
(и многие другие программы) жалуются, что это не так (потому что общая библиотека на самом деле не той версии):
sudo apt-get install --fix-broken --fix-missing
apt-get: 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
Система даже не запускает графический режим, приведенный выше вывод был получен с использованием неграфической консоли (с помощью Ctrl-Alt-F6
), и apt
сам по себе совершенно непригоден для использования, поэтому я не могу просто сделать что-то вроде переустановки.
Как я могу исправить и переустановить эти пакеты, если сама программа, которую я использую для управления ими, повреждена и непригодна для использования?
решение1
Сначала мне удалось получить графическую оболочку входа, вручную скопировавlibstdc++.so.6.0.21
на его место с Live USB-накопителя и создания ссылки на него из libstdc++.so.6
. Я использовал именно эту версию, поскольку она, похоже, является версией по умолчанию для Ubuntu 16.04 и также содержит «21», упомянутую в сообщении об ошибке («версия GLIBCXX_3.4.21»).
Хотя это, казалось, удовлетворило графический стек, те же ошибки остались apt
и с другими программами, зависящими от libstdc++6. После некоторых попыток я смог решить все это с помощью следующих шагов, используя dpkg
для ручной (де)установки вещей:
Загрузите deb-файлы в нужных версиях для 16.04:
wget http://mirrors.kernel.org/ubuntu/pool/main/a/apt/apt_1.2.10ubuntu1_amd64.deb http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb
Удаление этой конкретной версии, которая блокировала установку правильной версии libstdc++6:
sudo dpkg --force-depends -r libstdc++6:i386
Затем установите «хорошую» версию из файлов:
sudo dpkg -i libstdc++6_5.4.0-6ubuntu1~16.04.4_amd64.deb apt_1.2.10ubuntu1_amd64.deb
И наконец, исправлю беспорядок, который я оставил во время обновления и пробных версий:
sudo apt-get install -f