После обновления до Ubuntu 18.04 build-essential, g++, gcc & cpp содержали поврежденные пакеты
После обновления до Ubuntu 18.04 с 16.04 build-essential, g++, gcc & cpp E: Unable to correct problems, you have held broken packages.
$ sudo apt-get 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:7.2) but it is not going to be installed
Depends: g++ (>= 4:7.2) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
$ sudo apt-get install gcc
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:
gcc : Depends: gcc-7 (>= 7.3.0-12~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Тот же тип вывода для g ++ и cpp
Как это исправить?
2 ответа
Я сталкивался с тем же - в Ubuntu 16.04 у меня был PPA Toolchain Test Builds для сборок gcc и clang, включая gcc-7
, Во время обновления до 18.04 сторонние репозитории были отключены в процессе установки, включая этот PPA.
Чтобы это исправить, попробуйте (повторно?) Добавить PPA toolchain в список источников apt:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
Потом при установке build-essential
, он должен успешно выбрать gcc-7
из цепочки инструментов PPA.
У меня была та же проблема, но, очевидно, я использовал другой PPA, когда установил эти инструменты.
Для меня я исправил это с помощью:
sudo add-apt-repository ppa:jonathonf/gcc
Я столкнулся с той же проблемой при обновлении с 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 toolchain
из 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-essentials
еще раз.
$ sudo aptitude -f install build-essential