Проблема из-за неправильного libstdc++6

Вопрос или проблема

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

  1. Несоответствие версий: Каждая версия Ubuntu имеет собственный набор поддерживаемых пакетов с определёнными версиями. Использование пакетов из неподходящего репозитория (например, версия из Ubuntu 16.04 на системе Ubuntu 14.04) способно вызвать конфликты зависимостей.

  2. Смешивание репозиториев: При использовании пакетов из различных релизов дистрибутива могут возникать ситуации, когда зависимости не могут быть удовлетворены корректно из-за различий в версиях пакетов.

  3. Нарушение целостности системы: Ошибки в пакетном менеджере могут привести к ситуации, когда система частично содержит новые пакеты, но при этом отсутствуют необходимые для них зависимости.

Пример

В вашем случае появилась проблема, что библиотека 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".

Применение

Чтобы устранить эту проблему, необходимо выполнить следующие шаги:

  1. Проверка и исправление списков репозиториев: Убедитесь в правильной настройке файла /etc/apt/sources.list. Он должен содержать ссылки на репозитории только вашей версии дистрибутива (в данном случае — 14.04, Trusty). Убедитесь, что ни один репозиторий для версии 16.04 (Xenial) не используется.

  2. Удаление конфликтующих пакетов: Используйте команду sudo dpkg --remove --force-depends libstdc++6:amd64, чтобы удалить конфликтующую версию пакета libstdc++6.

  3. Установка правильной версии пакета:

    • Загрузите подходящую версию пакета для 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/
  4. Исправление зависимостей: После корректной установки пакета запустите sudo apt-get install --reinstall libstdc++6 и затем sudo apt-get -f install, чтобы восстановить систему зависимостей на вашем компьютере.

Следуя этим рекомендациям, вы должны восстановить работоспособность пакетного менеджера и устранить проблему с libstdc++6. Дальнейшим шагом будет регулярная проверка системы на предмет наличия несоответствующих репозиториев и поддержание целостности системы обновлений.

Эти действия не только устранят текущую проблему, но и укрепят стабильность системы в будущем, позволяя избежать проблем с зависимостями и пакетами.

Оцените материал
Добавить комментарий

Капча загружается...