LINUX.ORG.RU

Получение библиотек Qt при сборке

 , , , ,


0

3

Нужно собрать .deb пакет из Qt проекта. Соответственно для этого требуются библиотеки. Как минимум

 libQt5WebChannel.so.5  
 libQt5WebEngineCore.so.5  
 libQt5WebEngine.so.5
 libQt5WebEngineWidgets.so.5  
 libQt5WebSockets.so.5  
 libQt5WebView.so.5  

На сколько я понял в debian дстрибутивах библиотеки Qt не поставляются пакетами в стандартных репозиториях. Тогда возникает вопрос, к какому магическому танцу с бубном нужно прибегнуть чтобы при установке пакета эти либы нормально встали на целевую систему и бинарник смог бы их найти



Последнее исправление: sm4ll_3gg (всего исправлений: 1)

На сколько я понял в debian дстрибутивах библиотеки Qt не поставляются пакетами в стандартных репозиториях

это с чего ты так понял?
какие требования к версии Qt и версии Debian?

dib2 ★★★★★
()
Ответ на: комментарий от dib2

Я просто не нашел qt5-default и еще что-то связанное с qt5-webengine не помогло.

Qt 5.9.1 QT += core widgets webchannel websockets webenginewidgets xml multimedia svg Нужно собрать deb пакет, соответственно нужны все debian-based системы. Но хотя бы нужны необходимые пакеты в официальных дистрах убунты

sm4ll_3gg
() автор топика
Ответ на: комментарий от former_anonymous

так-то оно так, но даже при наличие альтернативного пакета в убунте на целевой системе все равно при запуске бинарника ругается на отсутствие библиотек. Вероятно, он их не там ищет

sm4ll_3gg
() автор топика
Ответ на: комментарий от sm4ll_3gg

вероятнее, что ты линкуешь исполняемый файл с более новыми версиями библиотек, чем в дебиане, либо линкуешь неправильно.

Посмотри вывод ldd на твоём бинарнике.

fluorite ★★★★★
()
Ответ на: комментарий от sm4ll_3gg

собирать нужно системным Qt, а не тем что ты скачал с qt.io. И под каждую систему собирать отдельно, ибо зависимости могут быть разные. QtWebEngine в Ubuntu есть только начиная с Zesty: https://packages.ubuntu.com/zesty/libqt5webengine5

former_anonymous ★★★
()
Последнее исправление: former_anonymous (всего исправлений: 1)
Ответ на: комментарий от former_anonymous

В смысле системным qt? Я собираю через dh_make. То есть по большому счету я просто вызываю сначала qmake с параметрами, а потом make. И вся сборка.

Может я не прав, подскажите как это правильнее сделать пожалуйста. Просто практически не нашел годной инфы про сборку deb пакетов из Qt приложений

sm4ll_3gg
() автор топика
Ответ на: комментарий от fluorite

Да, действительно под ubuntu 16.04 он не может найти эти либы. Но мне критически важно собрать пакет под хотя бы 16.04+. Как это вообще можно сделать?

sm4ll_3gg
() автор топика
Ответ на: комментарий от sm4ll_3gg

я просто вызываю сначала qmake с параметрами

все зависит от того, где лежит этот qmake. системный в /usr
какая минимальная версия Qt необходима для работы? если больше чем в дебе - придется возить с собой Qt.

dib2 ★★★★★
()
Ответ на: комментарий от dib2

Проблема как раз в том, что это промышленный проект, который написан на 5.9.1 и клиентам хоть усрись, но нужна версия никак не ниже 16.04.

А никаких магических танцов с бубном или древних мантр не знаете?

Кстати, по поводу мантр, с Qt Install Framework будут такие же проблемы?

sm4ll_3gg
() автор топика
Ответ на: комментарий от sm4ll_3gg

понятно, как у всех)

RTFM: http://doc.qt.io/qt-5/linux-deployment.html
когда все заработает из одной директории, запихиваем ее в .deb (flatpack/snap/tar.xz по вкусу), и на целевых машинах ставим в /opt

dib2 ★★★★★
()
Ответ на: комментарий от sm4ll_3gg

Кстати, по поводу мантр, с Qt Install Framework будут такие же проблемы?

емнип, он занимается установкой qt.io на машинах разработчиков, и довольно успешно.
в любом случае - Qt 5.9 тебе возить с собой.

dib2 ★★★★★
()
Ответ на: комментарий от sm4ll_3gg

Проблема как раз в том, что это промышленный проект, который написан на 5.9.1 и клиентам хоть усрись, но нужна версия никак не ниже 16.04.

Если всё настолько плохо, то универсальное решение - это статическая сборка Qt.

Хотя я бы всё же начала с анализа исходников - насколько крепко они прибиты к 5.9.1. Может, они просто использовались при написании проекта, а собраться и работать он успешно может и с более ранней версией. Если вдруг это сработает, можно отцепить вагон геморроя.

hobbit ★★★★★
()

На сколько я понял в debian дстрибутивах библиотеки Qt не поставляются пакетами в стандартных репозиториях.

Wrong

$ lsb_release -scd
Ubuntu 17.04
zesty

$ dpkg -S /usr/lib/x86_64-linux-gnu/libQt5WebChannel.so.5
libqt5webchannel5:amd64: /usr/lib/x86_64-linux-gnu/libQt5WebChannel.so.5

$ dpkg -S /usr/lib/x86_64-linux-gnu/libQt5WebEngineCore.so.5
libqt5webenginecore5:amd64: /usr/lib/x86_64-linux-gnu/libQt5WebEngineCore.so.5

$ dpkg -S /usr/lib/x86_64-linux-gnu/libQt5WebEngine.so.5
libqt5webengine5:amd64: /usr/lib/x86_64-linux-gnu/libQt5WebEngine.so.5

$ dpkg -S /usr/lib/x86_64-linux-gnu/libQt5WebEngineWidgets.so.5
libqt5webenginewidgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5WebEngineWidgets.so.5

$ dpkg -S /usr/lib/x86_64-linux-gnu/libQt5WebSockets.so.5
libqt5websockets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5WebSockets.so.5

libQt5WebView.so.5 не нашлось. Оно случаем не deprecated?

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 2)
Ответ на: комментарий от KennyMinigun

Не, WebView точно не deprecated. Это обрезанный компонент для встраивания в qml браузера. На взрослых системах пользуется WebEngine, на остальных питается тем что дают.

com
()
Ответ на: комментарий от com

Забавно, что libqt5webkit5-dev содержит

-rw-r--r-- root/root        22 2016-10-14 21:28 ./usr/include/x86_64-linux-gnu/qt5/QtWebKitWidgets/QWebView

Возможно класс вкомпилировали в другую библиотеку? (ибо apt-file не находит ни libQt5WebView.so.5 ни libQt5WebView.so)

KennyMinigun ★★★★★
()
Ответ на: комментарий от hobbit

универсальное решение - это статическая сборка Qt

Но ведь можно собрать динамически и использовать RPATH на своём бинарнике, чтобы загружать Qt из директории установки.

ilammy ★★★
()
Ответ на: комментарий от ilammy

Но ведь можно собрать динамически и использовать RPATH на своём бинарнике

Правда, но тогда пакет становится «not relocatable» (в терминах RPM, не знаю как в .deb)

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

Даже если использовать $ORIGIN? С помощью него можно указать относительный путь к директории с библиотеками.

ilammy ★★★
()
Ответ на: комментарий от KennyMinigun

Так я про эту штуку, что можно в rpath вписать, например, $ORIGIN/../lib. Тогда если бинарник установлен в /opt/myproject/bin, то библиотеки будут искаться в /opt/myproject/lib, если установились в /usr/bin, то библиотеки — в /usr/lib.

ilammy ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.