Вопрос или проблема
Когда я выполняю sudo apt-get -f install
, я получаю
Preparing to unpack .../libstdc++6_8.1.0-5ubuntu1~14.04_amd64.deb ...
Unpacking libstdc++6:amd64 (8.1.0-5ubuntu1~14.04) over (5.4.0-6ubuntu1~16.04.10) ...
dpkg: error processing archive /var/cache/apt/archives/libstdc++6_8.1.0-5ubuntu1~14.04_amd64.deb (--unpack):
trying to overwrite shared '/usr/share/doc/libstdc++6', which is different from other instances of package libstdc++6:amd64
Processing triggers for libc-bin (2.23-0ubuntu11) ...
Errors were encountered while processing:
/var/cache/apt/archives/libstdc++6_8.1.0-5ubuntu1~14.04_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)}
Я использую Ubuntu 14.04.5
Это, вероятно, из-за конфликта с libstdc++. (это произошло, когда я пытался установить adobe acrobat) Как/где я могу найти правильную версию libstdc++6 и как удалить поврежденную версию?
Вывод apt-cache policy libstdc++6:i386
:
libstdc++6:i386:
Installed: 8.1.0-5ubuntu1~14.04
Candidate: 8.1.0-5ubuntu1~14.04
Version table:
*** 8.1.0-5ubuntu1~14.04 500
500 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty/main i386 Packages
100 /var/lib/dpkg/status
5.4.0-6ubuntu1~16.04.11 8500
500 http://mirror.****/ubuntu xenial-updates/main i386 Packages
5.4.0-6ubuntu1~16.04.10 500
500 http://mirror.****/ubuntu xenial-security/main i386 Packages
5.3.1-14ubuntu2 500
500 http://mirror.****/ubuntu xenial/main i386 Packages
(Я убрал полный IP-адрес, когда написал **** выше)
$ dpkg --print-foreign-architectures is
i386
Вывод dpkg -l libstdc++6
:
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-====================-===============-===============-==============================================
iU libstdc++6:amd64 5.4.0-6ubuntu1~ amd64 GNU Standard C++ Library v3
iF libstdc++6:i386 8.1.0-5ubuntu1~ i386 GNU Standard C++ Library v3
Вывод grep -v "#" /etc/apt/sources.list
:
deb http://mirror**/ubuntu/ xenial main restricted
deb-src http://mirror**/ubuntu/ xenial main restricted
и так далее.
Будет ли проблема решена, если я вручную отредактирую этот файл и изменю xenial на trusty (выполнение apt-get-clean
не помогло исправить это)
Когда я выполняю sudo apt-get install --reinstall libstdc++6:i386
, я получаю:
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
libstdc++-5-dev : Depends: libstdc++6 (>= 5.5.0-12ubuntu1~14.04) but 5.4.0-6ubuntu1~16.04.10 is to be installed
libstdc++6 : Depends: gcc-5-base (= 5.4.0-6ubuntu1~16.04.10) but 5.5.0-12ubuntu1~14.04 is to be installed
Breaks: libreoffice-core (<= 1:4.4.4~rc3-0ubuntu1) but 1:4.2.8-0ubuntu5.1 is to be installed
Breaks: libstdc++6:i386 (!= 5.4.0-6ubuntu1~16.04.10) but 8.1.0-5ubuntu1~14.04 is to be installed
libstdc++6:i386 : Breaks: libstdc++6 (!= 8.1.0-5ubuntu1~14.04) but 5.4.0-6ubuntu1~16.04.10 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
и я не могу выполнить apt-get -f install
по той же причине, что указана в начале темы. Дайте мне знать, что можно сделать.
Похоже, ваш /etc/apt/sources.list
сильно испорчен. Вы каким-то образом получили включенные репозитории Xenial (16.04) на вашей системе Trusty (14.04). Очевидно, это вызывает такие странные конфликты пакетов.
Просто исправьте/очистите конфигурацию вашего репозитория, выполните apt-get clean
, и все должно снова заработать.
Используйте эту команду для удаления нового пакета libstdc++6 (16.04)
sudo dpkg –remove –force-depends libstdc++6:amd64
Скачайте версию libstdc++6 для trusty (14.04) из репозитория пакетов здесь
https://launchpad.net/ubuntu/trusty/amd64/libstdc++6/4.8.2-19ubuntu1
Распакуйте пакет и скопируйте 3 файла из загруженного пакета в соответствующее место
sudo cp libstdc++.so.6.0.19 /usr/lib/x86_64-linux-gnu/
sudo cp -P libstdc++.so.6 /usr/lib/x86_64-linux-gnu/
sudo cp -P libstdc++6 /usr/share/doc/
apt-get должен теперь работать, переустановите libstdc++6 для исправления зависимостей
sudo apt-get install –reinstall libstdc++6
sudo apt-get -f install
Теперь все должно работать нормально
.
Ответ или решение
Проблемы, возникающие при работе с системным пакетом libstdc++6, часто связаны с конфликтами версий и зависимостей, что может представлять значительную проблему для пользователей операционной системы Ubuntu. В данном случае, проблема возникла из-за несоответствия между версиями пакета libstdc++6 и системой, что привело к ошибкам при выполнении команды sudo apt-get -f install
.
Теория
Пакет libstdc++6 представляет собой библиотеку стандартных компонентов C++ и является ключевым элементом для работы компилятора GCC и связанных с ним приложений. Ошибки, связанные с этим пакетом, часто возникают из-за следующих причин:
-
Несоответствие версий: Каждая версия Ubuntu имеет собственный набор поддерживаемых пакетов с определёнными версиями. Использование пакетов из неподходящего репозитория (например, версия из Ubuntu 16.04 на системе Ubuntu 14.04) способно вызвать конфликты зависимостей.
-
Смешивание репозиториев: При использовании пакетов из различных релизов дистрибутива могут возникать ситуации, когда зависимости не могут быть удовлетворены корректно из-за различий в версиях пакетов.
-
Нарушение целостности системы: Ошибки в пакетном менеджере могут привести к ситуации, когда система частично содержит новые пакеты, но при этом отсутствуют необходимые для них зависимости.
Пример
В вашем случае появилась проблема, что библиотека libstdc++6 версии 8.1.0 из репозитория Xenial пытается быть установлена на систему Trusty, в то время как система ожидает версию 5.4.0, подходящую ей по архитектуре и зависимостям. Это приводит к ошибке: "trying to overwrite shared ‘/usr/share/doc/libstdc++6’, which is different from other instances of package libstdc++6:amd64".
Применение
Чтобы устранить эту проблему, необходимо выполнить следующие шаги:
-
Проверка и исправление списков репозиториев: Убедитесь в правильной настройке файла
/etc/apt/sources.list
. Он должен содержать ссылки на репозитории только вашей версии дистрибутива (в данном случае — 14.04, Trusty). Убедитесь, что ни один репозиторий для версии 16.04 (Xenial) не используется. -
Удаление конфликтующих пакетов: Используйте команду
sudo dpkg --remove --force-depends libstdc++6:amd64
, чтобы удалить конфликтующую версию пакета libstdc++6. -
Установка правильной версии пакета:
- Загрузите подходящую версию пакета для Trusty, например, из Launchpad.
- Извлеките пакет и установите его файлы в соответствующие системные директории, используя команды:
sudo cp libstdc++.so.6.0.19 /usr/lib/x86_64-linux-gnu/ sudo cp -P libstdc++.so.6 /usr/lib/x86_64-linux-gnu/ sudo cp -P libstdc++6 /usr/share/doc/
-
Исправление зависимостей: После корректной установки пакета запустите
sudo apt-get install --reinstall libstdc++6
и затемsudo apt-get -f install
, чтобы восстановить систему зависимостей на вашем компьютере.
Следуя этим рекомендациям, вы должны восстановить работоспособность пакетного менеджера и устранить проблему с libstdc++6. Дальнейшим шагом будет регулярная проверка системы на предмет наличия несоответствующих репозиториев и поддержание целостности системы обновлений.
Эти действия не только устранят текущую проблему, но и укрепят стабильность системы в будущем, позволяя избежать проблем с зависимостями и пакетами.