Как исправить неудовлетворенные зависимости Qt5

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

Я использую Ubuntu 16.10 с Qt4.8.7 и хочу установить Qt5, чтобы скомпилировать пакет. Я установил qt5-qmake из репозитория и установил qt5 по умолчанию:

export QT_SELECT=qt5
./configure && make
...fatal error: QtCore/QTextCodec: No such file or directory

Таким образом, пакет не компилируется, очевидно, из-за оператора include:

include "<"QtCore/QtGlobal

для которого, как я думаю, мне нужна среда разработки. Сначала я попытался установить ее с сайта Qt, скачав qt-opensource-linux-x64-5.6.1.run, затем попытался установить qtbase5-dev из Synaptic.

Это не сработало из-за неудовлетворенных зависимостей. Все установленные файлы — это версии ubuntu7-2 из основного репозитория Ubuntu Yakkety; требуемые версии ubuntu6-4 также доступны. Они также используются во многих других пакетах, которые я не могу позволить себе сломать.

$ sudo aptitude install qtbase5-dev
Следующие НОВЫЕ пакеты будут установлены: libegl1-mesa-dev{a} libgles2-mesa-dev{a} libglu1-mesa-dev{a} libmirclient-dev{ab} libmircommon-dev{ab} libmircookie-dev{ab} libprotobuf-dev{a} libqt5opengl5-dev{ab} libwayland-bin{a} libwayland-dev{a} libxkbcommon-dev{a} qt5-qmake{a} qtbase5-dev{b} qtbase5-dev-tools{a} 
0 пакетов обновлено, 14 новых установлено, 0 пакетов удалено и 8 не обновлено.
Необходимо скачать 4,473 kB архивов. После распаковки будет использовано 33.6 MB.
У следующих пакетов неудовлетворенные зависимости:
 libqt5opengl5-dev : Depends: libqt5opengl5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
 libmirclient-dev : Depends: libmirclient9 (= 0.24.0+16.10.20160815.3-0ubuntu2), но установлен 0.24.1+16.10.20160928-0ubuntu1
 libmircommon-dev : Depends: libmircommon6 (= 0.24.0+16.10.20160815.3-0ubuntu2), но установлен 0.24.1+16.10.20160928-0ubuntu1
 qtbase5-dev : Depends: libqt5concurrent5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5core5a (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5dbus5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5gui5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5network5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5printsupport5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5sql5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5test5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5widgets5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
               Depends: libqt5xml5 (= 5.6.1+dfsg-3ubuntu6~4), но установлен 5.6.1+dfsg-3ubuntu7~2
 libmircookie-dev : Depends: libmircookie2 (= 0.24.0+16.10.20160815.3-0ubuntu2), но установлен 0.24.1+16.10.20160928-0ubuntu1
Следующие действия решат эти зависимости:
         Оставить следующие пакеты в их текущей версии:     1)     libegl1-mesa-dev [Не установлен]                        2)     libgles2-mesa-dev [Не установлен]                  
3)     libmirclient-dev [Не установлен]                   
4)     libmircommon-dev [Не установлен]                   
5)     libmircookie-dev [Не установлен]                   
6)     libqt5opengl5-dev [Не установлен]                  
7)     qtbase5-dev [Не установлен]                        

Принять это решение? [Y/n/q/?] ?

Решение apt-get — оставить все без изменений.

Кажется странным, что версия основной репозитории Qt 5.6.1 требует других библиотек для остальных пакетов.

Похоже, мне нужно понизить версии этих библиотек с 7.2 до 6.4. Могу ли я сделать это безопасно и установить Qt 5.6.1? Или есть лучший способ решить эту проблему?

$ apt-cache policy libqt5core5a
libqt5core5a:
  Установлено: 5.6.1+dfsg-3ubuntu7~2
  Кандидат: 5.6.1+dfsg-3ubuntu7~2
  Таблица версий:
 *** 5.6.1+dfsg-3ubuntu7~2 100
        100 /var/lib/dpkg/status
     5.6.1+dfsg-3ubuntu6~4 500
        500 http://mirrors.psu.ac.th/ubuntu yakkety/main amd64 Packages

В итоге я разобрался с этой проблемой, используя Synaptic, чтобы принудительно установить зависимости qtbase5-dev на предыдущие версии (Yakkety-upgrades или Yakkety).

Это оставило файлы libmir. Ручная установка не удалась, но показала проблемные зависимости. Повтор этих действий для зависимостей и работа с ними в итоге привела к файлам, которые нужно было понизить в версии.

Принуждение через Synaptic также удалило множество базовых приложений Yakkety; жаль, что я не нашел способа понизить их параллельно, сохраняя согласованную систему, но в конце концов я удалил их, установил Qt5 и вручную переустановил отсутствующие пакеты, используя раздел ‘Не установлено (остаточная конфигурация)’ статуса в Synaptic, чтобы выявить и переустановить их.

У меня были небольшие проблемы с безопасностью некоторых пакетов при перезагрузке, но они быстро были решены с помощью Google.

У меня была такая же проблема

 qtbase5-dev : Depends: libqt5dbus5 (= 5.15.3+dfsg-2), но собирается установить 5.15.3+dfsg-2ubuntu0.2
               Depends: libqt5gui5 (= 5.15.3+dfsg-2), но собирается установить 5.15.3+dfsg-2ubuntu0.2
               Depends: libqt5network5 (= 5.15.3+dfsg-2), но собирается установить 5.15.3+dfsg-2ubuntu0.2
               Depends: libqt5sql5 (= 5.15.3+dfsg-2), но собирается установить 5.15.3+dfsg-2ubuntu0.2
               Depends: libqt5widgets5 (= 5.15.3+dfsg-2), но собирается установить 5.15.3+dfsg-2ubuntu0.2
               Depends: libqt5xml5 (= 5.15.3+dfsg-2), но собирается установить 5.15.3+dfsg-2ubuntu0.2
               Recommends: libqt5opengl5-dev (= 5.15.3+dfsg-2), но не будет установлен
    ```

Ubuntu добавляет суффикс для патча безопасности, такой как ubuntu0.2, простейшее решение — это понизить пакеты, указав точные версии

```bash sudo apt install libqt5core5a=5.15.3+dfsg-2 libqt5dbus5=5.15.3+dfsg-2 libqt5gui5=5.15.3+dfsg-2 libqt5network5=5.15.3+dfsg-2 libqt5sql5=5.15.3+dfsg-2 libqt5widgets5=5.15.3+dfsg-2 libqt5xml5=5.15.3+dfsg-2 libqt5opengl5-dev=5.15.3+dfsg-2

надеюсь, это поможет

.

Ответ или решение

Конфликт незакрытых зависимостей при установке Qt5 может стать серьёзной проблемой, особенно в среде Ubuntu. Рассмотрим проблему на примере Ubuntu 16.10 и предлагаем решение, использующее систематический подход.

Почему появляется конфликт зависимостей в Ubuntu

Системы управления пакетами, такие как APT в Ubuntu, опираются на строгую систему зависимостей, чтобы обеспечить бесперебойное функционирование пакетов. Ситуации, когда общедоступные библиотеки имеют различные версии из-за обновлений безопасности или спецификации пакета, могут приводить к несоответствиям, как это произошло с Qt5.

Общий подход к исправлению несоответствий зависимостей

  1. Идентификация проблемных зависимостей: используй команды вроде apt-cache policy, чтобы определить текущие версии установленных библиотек и те, которые необходимы для специфического пакета.

  2. Использование Synaptic или APT: GUI приложение Synaptic может предложить гибкие возможности ручного управления версиями пакетов и зависимостей. Однако же командная строка через APT также может быть весьма эффективной.

  3. Принудительное назначение версий библиотек: Если известны подходящие версии для необходимых библиотек, можно использовать конкретные команды для установки требуемой версии. Например:

    sudo apt install libqt5core5a=5.6.1+dfsg-3ubuntu6~4
  4. Отмена и переустановка пакетов: В случае удаления критически важных пакетов, попробуйте сразу же их переустановить, исследуя раздел "Не установлено (остаточная конфигурация)" в Synaptic или с помощью apt-get install.

Пошаговое руководство по установке Qt5

  1. Подготовка системы и установка Qt5: Обязательно обновите списки пакетов:

    sudo apt update
  2. Понижение версий конфликтующих пакетов: Понизьте версии требуемых библиотек до нужных (если необходимо), используя уже упомянутую команду apt install с указанием версии.

  3. Устранение конфликтов и переустановка удалённых пакетов: После установки Qt5, в случае конфликта уважайте зависимости обновления безопасности, или, при крайней необходимости, используйте понижение версий.

Заключение

Хотя проблему в ситуации конкретно с Qt5 в Ubuntu 16.10 можно было решить понижением версий пакетов, всегда следуем подходу к разумному балансу между поддержанием неактуальных библиотек и новейшими обновлениями для безопасности. Такой метод позволит избежать будущих конфликтов и обеспечит стабильность вашей разработки.

Соблюдение данных рекомендаций и введение правильного управления версиями может положительно повлиять на производительность и безопасность вашей системы.

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

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