Вопрос или проблема
Я использую 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.
Общий подход к исправлению несоответствий зависимостей
-
Идентификация проблемных зависимостей: используй команды вроде
apt-cache policy
, чтобы определить текущие версии установленных библиотек и те, которые необходимы для специфического пакета. -
Использование Synaptic или APT: GUI приложение Synaptic может предложить гибкие возможности ручного управления версиями пакетов и зависимостей. Однако же командная строка через APT также может быть весьма эффективной.
-
Принудительное назначение версий библиотек: Если известны подходящие версии для необходимых библиотек, можно использовать конкретные команды для установки требуемой версии. Например:
sudo apt install libqt5core5a=5.6.1+dfsg-3ubuntu6~4
-
Отмена и переустановка пакетов: В случае удаления критически важных пакетов, попробуйте сразу же их переустановить, исследуя раздел "Не установлено (остаточная конфигурация)" в Synaptic или с помощью
apt-get install
.
Пошаговое руководство по установке Qt5
-
Подготовка системы и установка Qt5: Обязательно обновите списки пакетов:
sudo apt update
-
Понижение версий конфликтующих пакетов: Понизьте версии требуемых библиотек до нужных (если необходимо), используя уже упомянутую команду
apt install
с указанием версии. -
Устранение конфликтов и переустановка удалённых пакетов: После установки Qt5, в случае конфликта уважайте зависимости обновления безопасности, или, при крайней необходимости, используйте понижение версий.
Заключение
Хотя проблему в ситуации конкретно с Qt5 в Ubuntu 16.10 можно было решить понижением версий пакетов, всегда следуем подходу к разумному балансу между поддержанием неактуальных библиотек и новейшими обновлениями для безопасности. Такой метод позволит избежать будущих конфликтов и обеспечит стабильность вашей разработки.
Соблюдение данных рекомендаций и введение правильного управления версиями может положительно повлиять на производительность и безопасность вашей системы.