Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: vohulg от Сентябрь 05, 2013, 07:05



Название: Проблема запуска qt приложения
Отправлено: vohulg от Сентябрь 05, 2013, 07:05
Доброго дня.
Такая проблема возникла при запуске скомпилированного приложения.

На Slackware 14 в QTCreator 5 скомпилировал приложение. Затем исполняемый файл перенес на другую машину с установленной такой же Slackware 14, но без QTCreator. Для того чтобы приложение запустилось я копирую все недостающие библиотеки (какие недостает я проверяю через команду $ ldd myappl) из машины где я компилировал в машину без QTCreator. ldd находит все нужные библиотеки. Но при запуске возникает ошибка:

"Failed to load platform plugin "xcb". Available platform are:

Aborted"

Кто знает в чем может быть проблема. И возможно ли скомпилировать так чтобы  библиотеки QT сразу включились в исполняемый файл, пусть даже он весит много.

Спасибо


Название: Re: Проблема запуска qt приложения
Отправлено: Serr500 от Сентябрь 05, 2013, 08:20
QTCreator 5
Нет такого зверя. Есть Qt5, а QtCreator - IDE для Qt и его последняя версия - 2.8.1.

Для того чтобы приложение запустилось я копирую все недостающие библиотеки (какие недостает я проверяю через команду $ ldd myappl)
ldd не покажет все библиотеки. Есть ещё плагины, которые ldd не покажет. Почитайте вот это: http://qt-project.org/wiki/Deploying_a_Qt5_Application_Linux (http://qt-project.org/wiki/Deploying_a_Qt5_Application_Linux).

возможно ли скомпилировать так чтобы  библиотеки QT сразу включились в исполняемый файл
Возможно. Смотрите в сторону статической сборки.

P.S. Копирование недостающих библиотек не есть правильный путь в Linux. Рекомендуется создавать пакеты с зависимостями.


Название: Re: Проблема запуска qt приложения
Отправлено: Alex Custov от Сентябрь 05, 2013, 13:43
И возможно ли скомпилировать так чтобы  библиотеки QT сразу включились в исполняемый файл, пусть даже он весит много.

Принято создавать пакеты, где указаны зависимости.


Название: Re: Проблема запуска qt приложения
Отправлено: GreatSnake от Сентябрь 05, 2013, 14:49
P.S. Копирование недостающих библиотек не есть правильный путь в Linux. Рекомендуется создавать пакеты с зависимостями.
А как быть бедным разработчикам коммерческих приложений, которые не хотят покупать Qt, но хотят, чтобы их приложения работали даже на древних системах?


Название: Re: Проблема запуска qt приложения
Отправлено: Serr500 от Сентябрь 05, 2013, 15:02
Не понял связи...  ???


Название: Re: Проблема запуска qt приложения
Отправлено: GreatSnake от Сентябрь 05, 2013, 15:06
Не понял связи...  ???
А чего тут не понятного ???
Коли хочешь, чтобы твоё приложение везде работало - носи всё с собой.


Название: Re: Проблема запуска qt приложения
Отправлено: Serr500 от Сентябрь 05, 2013, 15:16
И причём здесь покупка коммерческой версии?


Название: Re: Проблема запуска qt приложения
Отправлено: GreatSnake от Сентябрь 05, 2013, 15:19
И причём здесь покупка коммерческой версии?
А при том, что чтобы не таскать всё с собой, можно линковаться статически. Но не для коммерческих приложений.


Название: Re: Проблема запуска qt приложения
Отправлено: Serr500 от Сентябрь 05, 2013, 15:39
А! Забыл про этот нюанс...  :( Прошу пардону...


Название: Re: Проблема запуска qt приложения
Отправлено: kamre от Сентябрь 05, 2013, 16:17
Принято создавать пакеты, где указаны зависимости.
Если создать пакет, например, для ubuntu и затребовать в зависимости Qt 5.1, то как установить свою программу в ubuntu 12.04 LTS?


Название: Re: Проблема запуска qt приложения
Отправлено: Alex Custov от Сентябрь 05, 2013, 16:25
Если создать пакет, например, для ubuntu и затребовать в зависимости Qt 5.1, то как установить свою программу в ubuntu 12.04 LTS?

Добавить Qt5 через ppa? Я не говорю, что пакеты - единственно правильно, если нет другого выхода, что бывает очень редко, можно компилировать статически или таскать все dll с собой. И даже в этих случаях могут быть проблемы - Webkit не поддерживает статику, а в с случае с кучей DLL они должны быть скомпилированы на более старой системе.


Название: Re: Проблема запуска qt приложения
Отправлено: vohulg от Сентябрь 06, 2013, 14:18
Так я и не понял как конкретно определить список зависимостей. Если вы говорите что ldd показывает не все, то что показывает все.

В этой статье http://qt-project.org/wiki/Deploying_a_Qt5_Application_Linux описано что для определния зависимостей использует ldd

Then I started to search how to find the dependencies of my app. I found that I have to use the ldd tool

Потом в описании есть описание моей проблемы - Later I spent many hours finding out why my installed app cannot start: I had to include the folder platforms and the file libqxcb.so from the /path/to/Qt/plugins/ into the DEB package. And in addition I had to install the library libQt5DBus.so.5, since libqxcb.so requires it.

То есть человек также утилитой ldd определил и затем скопировал в пакет все выведенные библиотеки, а приложение не запускается и просит какой то пакет xcb.

Насколько я понял переведя эти предложения, что он скопировал папку /path/to/Qt/plugins/platforms/ в пакет.
Я тоже так сделал, но только засунул папку /path/to/Qt/plugins/platforms/ рядом с исполняемым файлом. В результате ошибка немного поменялась:
"Failed to load platform plugin "xcb". Available platform are:
linuxfb
minimal
offscreen
xcb

Aborted"

Как загрузить эти платформы ?


Название: Re: Проблема запуска qt приложения
Отправлено: GreatSnake от Сентябрь 06, 2013, 14:30
Так я и не понял как конкретно определить список зависимостей. Если вы говорите что ldd показывает не все, то что показывает все.
Способов много. Вот хотя бы один:
Код
Bash
LD_DEBUG=libs <your_program> 2>&1 > /dev/null  | grep 'calling init:' | cut -f 3 -d ':'
 


Название: Re: Проблема запуска qt приложения
Отправлено: alex312 от Сентябрь 07, 2013, 08:50
vohulg, вы проверяете ldd свое приложение. так проверте с помощью ldd и плагин libqtxcb.so, посмотрите что ему не хватает.


Название: Re: Проблема запуска qt приложения
Отправлено: vohulg от Сентябрь 09, 2013, 07:23
vohulg, вы проверяете ldd свое приложение. так проверте с помощью ldd и плагин libqtxcb.so, посмотрите что ему не хватает.

Спасибо, помогло. Не хватало libQt5Dbus для  /path/to/Qt/plugins/platforms/*

Причем получается что для запуска приложения надо чтобы в одной папке с исполняемым файлом лежала папка /platforms c содержимым из библиотеки Qt (/path/to/Qt/plugins/platforms/*)