Начиная с обновления от Ubuntu 16.04 до 17,04, я больше не могу устанавливать gcc-7
или g++-7
из репозитория http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu. На самом деле я не могу даже установить build-essential
.
В соответствии с программным обеспечением и Обновлениями> Другое программное обеспечение, репозиторий перечислен как это:
http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu zesty main
Попытка установить build-essential
:
$ sudo apt install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
build-essential : Depends: gcc (>= 4:5.2) but it is not going to be installed
Depends: g++ (>= 4:5.2) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Однако:
$ gcc --version
gcc (Ubuntu 5.4.1-8ubuntu1) 5.4.1 20170304
...
$ g++ --version
g++ (Ubuntu 5.4.1-8ubuntu1) 5.4.1 20170304
...
Таким образом, как я могу установить build-essential
снова?
Таким образом, я смог установить build-essential
снова путем выполнения этих шагов:
$ sudo apt install build-essential
...
The following packages have unmet dependencies:
build-essential : Depends: gcc (>= 4:5.2) but it is not going to be installed
Depends: g++ (>= 4:5.2) but it is not going to be installed
A gcc
версия большие 5.2 требуются, поэтому позволяет попытке установить gcc
.
$ sudo apt install gcc
...
The following packages have unmet dependencies:
gcc : Depends: cpp (>= 4:6.3.0-2ubuntu1) but it is not going to be installed
Depends: gcc-6 (>= 6.3.0-9~) but it is not going to be installed
Хорошо. Что-то еще отсутствует. Давайте попытаемся установить это.
$ sudo apt install cpp
...
The following packages have unmet dependencies:
cpp : Depends: cpp-6 (>= 6.3.0-9~) but it is not going to be installed
Тем не менее ничто. Попробовать еще раз.
$ sudo apt install cpp-6
...
The following packages have unmet dependencies:
cpp-6 : Depends: gcc-6-base (= 6.3.0-12ubuntu2) but 6.3.0-18ubuntu2~16.04 is to be installed
Еще раз.
$ sudo apt install gcc-6-base
...
gcc-6-base is already the newest version (6.3.0-18ubuntu2~16.04).
Таким образом, здесь я не знаю то, что точно пошло не так, как надо. Нужно отметить, что существует a 16.04
строка в конце того номера версии. Это казалось нечетным. Я удалил тот пакет.
$ sudo apt remove gcc-6-base
Теперь я смог установить build-essential
снова. Это также переустановит gcc-6-base
.
$ sudo apt install build-essential
Оставление проблемой:
$ sudo apt upgrade
...
The following packages have been kept back:
cpp g++ gcc
Корень проблемы подобен как выше, gcc-7-base
является дефектным, но я не могу просто удалить его, так как я получаю это:
The following packages have unmet dependencies:
libgcc1 : Depends: gcc-7-base (= 7.1.0-5ubuntu2~16.04) but it is not going to be installed
va-driver-all : Depends: mesa-va-drivers but it is not going to be installed or
vdpau-va-driver but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
Опасная зона:
Мне удалось решить этот вопрос со следующими шагами:
$ sudo apt install aptitude
$ sudo dpkg --force-all -P gcc-7-base
$ sudo dpkg --force-all -P gcc-7-base:i386
$ sudo aptitude install gcc-7-base
Это супер опасно и могло бы повредить Вашу установку. Выполнение dpkg --force-all -P
удалит пакет сильно, игнорируя любые зависимости от этого пакета. После этого постоянным клиентом apt upgrade
мог бы удалить почти все соответствующее программное обеспечение из Вашей установки.
Я только смог восстановиться оттуда usind aptitude
который решил каждый вопрос зависимости, я имел.
У меня такая же проблема, но решение на самом деле довольно простое поэтому он говорит: следующие пакеты имеют неудовлетворенные зависимости:
build-essential : Depends: gcc (>= 4:5.2) but it is not going to be installed
Depends: g++ (>= 4:5.2) but it is not going to be installed
просто установите пакет на «зависит» сделать :
apt-get install gcc
а затем будет сказано :
The following packages have unmet dependencies:
gcc : Depends: cpp (= 4:9.2.1-3.1) but 4:8.3.0-1 is to be installed
Depends: gcc-9 (>= 9.2.1-1~) but it is not going to be installed
затем сделать :
apt-get install cpp
поскольку вы можете увидеть зависимости: измените с depend:gcc на depend:cpp затем делайте это снова и снова, пока та же ошибка не перестанет появляться, а затем:
sudo apt install build-essential
Я столкнулся с той же проблемой при обновлении с 14.04 LTS до 16.04 LTS. Я написал подробное решение здесь. Но для удобства воспроизведу здесь ключевые моменты.
Удалите все зависимые библиотеки (autoremove
) и установите все отсутствующие библиотеки с помощью sudo apt-get -f install
(-f
означает -- fix-missing
)
sudo apt-get autoremove
sudo apt-get -f install
sudo apt-get update
sudo apt-get upgrade
Установите тулчейн Ubuntu
из PPA
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
Установите aptitude
.
sudo apt install aptitude
Рекурсивно пытайтесь установить поврежденные библиотеки, пока не разрешите конфликт, обновив или исправив определенную библиотеку. В моем случае мне пришлось исправить libstdc++6
$ sudo aptitude -f install build-essential
The following NEW packages will be installed:
build-essential cpp{a} cpp-5{a} g++{a} g++-5{a} gcc{a} gcc-5{a} libasan2{a} libcc1-0{ab}
libcilkrts5{a} libgcc-5-dev{a} liblsan0{ab} libmpx0{a} libstdc++-5-dev{a}
The following packages will be upgraded:
gcc-5-base libstdc++6{b}
2 packages upgraded, 14 newly installed, 0 to remove and 5 not upgraded.
Need to get 29.6 MB of archives. After unpacking 100 MB will be used.
The following packages have unmet dependencies:
liblsan0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
libcc1-0 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
libstdc++6 : Depends: gcc-9-base (= 9.3.0-10ubuntu2~16.04) but 9.3.0-11ubuntu0~14.04 is installed.
, поскольку build-essential
требует gcc-5
.
$ sudo apt-get -f install gcc-5
The following packages have unmet dependencies:
gcc-5 : Depends: cpp-5 (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed
Depends: libcc1-0 (>= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
Depends: libgcc-5-dev (= 5.5.0-12ubuntu1~16.04) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Но gcc-5
, в свою очередь, зависит от cpp-5
$ sudo apt-get -f install cpp-5
The following packages have unmet dependencies:
cpp-5 : Depends: gcc-5-base (= 5.5.0-12ubuntu1~16.04) but 5.4.0-6ubuntu1~16.04.12 is to be installed
cpp-5
зависит от gcc-5-base
. Здесь вы можете видеть, что есть определенный конфликт. Aptitide предлагает несколько вариантов решения конфликта. В моем случае обновление libstdc++6
решило проблему.
$ sudo aptitude -f install gcc-5-base
The following packages will be REMOVED:
gcc-5-base{u}
0 packages upgraded, 0 newly installed, 1 to remove and 6 not upgraded.
Need to get 0 B of archives. After unpacking 67.6 kB will be freed.
The following packages have unmet dependencies:
libstdc++6 : Depends: gcc-5-base (= 5.4.0-6ubuntu1~16.04.12) but it is not going to be installed.
open: 115; closed: 488; defer: 35; conflict: 58 .The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) gcc-5-base [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates)]
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Upgrade the following packages:
1) libstdc++6 [5.4.0-6ubuntu1~16.04.12 (now, xenial-security, xenial-updates) -> 9.3.0-10ubuntu2~16.0
Наконец-то, теперь конфликт разрешен, попробуйте снова установить build-essential
.
$ sudo aptitude -f install build-essential
Удачи!