sudo apt-get установить libstdc ++

16

Когда я пытаюсь установить, libstdc++используя:

sudo apt-get install libstdc++

Я получаю приведенную ниже ошибку в Ubuntu. У вас есть идеи по этому поводу?

The following packages have unmet dependencies:
 libstdc++-4.8-doc : Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                     Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
                     Conflicts: libstdc++6-4.7-doc but 4.7.3-12ubuntu1 is to be installed
 libstdc++-4.9-doc : Conflicts: libstdc++-4.8-doc but 4.8.5-2ubuntu1~14.04.1 is to be installed
                     Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                     Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
                     Conflicts: libstdc++6-4.7-doc but 4.7.3-12ubuntu1 is to be installed
 libstdc++-5-doc : Conflicts: libstdc++-4.8-doc but 4.8.5-2ubuntu1~14.04.1 is to be installed
                   Conflicts: libstdc++-4.9-doc but 4.9.3-8ubuntu2~14.04 is to be installed
                   Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                   Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
                   Conflicts: libstdc++6-4.7-doc but 4.7.3-12ubuntu1 is to be installed
 libstdc++6-4.6-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
 libstdc++6-4.6-doc : Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
 libstdc++6-4.7-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
 libstdc++6-4.7-doc : Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
 libstdc++6-4.8-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
                      Conflicts: libstdc++6-4.7-dbg but 4.7.3-12ubuntu1 is to be installed
 libstdc++6-4.8-dbg-armhf-cross : Conflicts: libstdc++6-4.7-dbg-armhf-cross but 4.7.3-11ubuntu1cross1.85 is to be installed
 libstdc++6-4.9-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
                      Conflicts: libstdc++6-4.7-dbg but 4.7.3-12ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.8-dbg but 4.8.5-2ubuntu1~14.04.1 is to be installed
 libstdc++6-5-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                    Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
                    Conflicts: libstdc++6-4.7-dbg but 4.7.3-12ubuntu1 is to be installed
                    Conflicts: libstdc++6-4.8-dbg but 4.8.5-2ubuntu1~14.04.1 is to be installed
                    Conflicts: libstdc++6-4.9-dbg but 4.9.3-8ubuntu2~14.04 is to be installed
E: Unable to correct problems, you have held broken packages.
user2856923
источник
Вы недавно добавили PPA?
Рафаэль
1
На самом деле пакет не называется libstdc++(возможно, вы пытаетесь установить libstdc++6? Из-за ++символов, когда aptне удается найти точное совпадение, он обрабатывает имя пакета как регулярное выражение, поэтому в этом случае он пытается установить любой пакет, имя которого за матчами libstdследует один или несколько c- многие из которых конфликтуют, как вы можете видеть
SteelDriver
@steeldriver: это, безусловно, ответ, и imho должен быть ответом, а не комментарием (хотя это поможет объяснить, как избежать обработки строки как регулярного выражения). На странице Справочник aptговорит , что он будет рассматривать имена пакетов , как регулярные выражения , если они включают в себя ., ?или *без упоминания +, так что поведение точно не ожидаются.
Ричи

Ответы:

12

На самом деле пакет не называется libstdc++(возможно, вы пытаетесь установить libstdc++6?)

Когда apt не находит точного соответствия имени пакета, он обрабатывает данную строку как регулярное выражение. В этом случае ++он пытается установить любой пакет, имя которого соответствует libstdодному или нескольким, cмногие из которых конфликтуют, как вы можете видеть.

К сожалению, мне так и не удалось выяснить, как отключить это поведение (в прошлом я не пробовал использовать escape-символы), - единственное решение, которое я знаю, - это быть осторожным, чтобы дать точное имя пакета, где любые символы регулярных выражений может быть неверно истолкован, и чтобы убедиться, что каталог пакетов обновлен, т.е.

sudo apt-get update
sudo apt-get install libstdc++6
steeldriver
источник
это должно быть принято. Что касается выключения: можно написать псевдоним или функцию, которая ^PACKAGE$
обернет
11

Сначала запустите эти команды

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install aptitude

а потом попробуй

sudo apt-get install libstdc++6

или попробуйте этот результат поиска и установите один требуемый пакет из перечисленных http://packages.ubuntu.com/search?keywords=libstdc%2B%2B

МАК Рипон
источник
2
+1 Хороший ответ, но не libstdc++входит ли в build-essentialс?
Кев Ински
7
Ох, а зачем устанавливать, aptitudeесли вы не используете его для установки libstdc++6?
Кев Ински
2
Спасибо за ваш ответ, Кев. Я пытался дать какие-то возможности в случае неудачи. И способность справиться со своей ошибкой.
MAK Ripon
sudo apt-get update apt-get: ошибка при загрузке общих библиотек: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: неверный заголовок ELF
mvladk
3
LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
Венкат Котра
источник
6
Не могли бы вы объяснить, почему пользователь должен это делать и что делает каждая команда? (на всякий случай, если кто-то еще прочитает ваш ответ и решит просто скопировать и вставить его для решения не той проблемы?) ;-)
Fabby