Russian Qt Forum
Сентябрь 30, 2024, 06:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема запуска qt приложения  (Прочитано 9694 раз)
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 сразу включились в исполняемый файл, пусть даже он весит много.

Спасибо
Записан
Serr500
Гость
« Ответ #1 : Сентябрь 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.

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

P.S. Копирование недостающих библиотек не есть правильный путь в Linux. Рекомендуется создавать пакеты с зависимостями.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Сентябрь 05, 2013, 13:43 »

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

Принято создавать пакеты, где указаны зависимости.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Сентябрь 05, 2013, 14:49 »

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

Qt 5.11/4.8.7 (X11/Win)
Serr500
Гость
« Ответ #4 : Сентябрь 05, 2013, 15:02 »

Не понял связи...  Непонимающий
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Сентябрь 05, 2013, 15:06 »

Не понял связи...  Непонимающий
А чего тут не понятного Непонимающий
Коли хочешь, чтобы твоё приложение везде работало - носи всё с собой.
Записан

Qt 5.11/4.8.7 (X11/Win)
Serr500
Гость
« Ответ #6 : Сентябрь 05, 2013, 15:16 »

И причём здесь покупка коммерческой версии?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Сентябрь 05, 2013, 15:19 »

И причём здесь покупка коммерческой версии?
А при том, что чтобы не таскать всё с собой, можно линковаться статически. Но не для коммерческих приложений.
Записан

Qt 5.11/4.8.7 (X11/Win)
Serr500
Гость
« Ответ #8 : Сентябрь 05, 2013, 15:39 »

А! Забыл про этот нюанс...  Грустный Прошу пардону...
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #9 : Сентябрь 05, 2013, 16:17 »

Принято создавать пакеты, где указаны зависимости.
Если создать пакет, например, для ubuntu и затребовать в зависимости Qt 5.1, то как установить свою программу в ubuntu 12.04 LTS?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Сентябрь 05, 2013, 16:25 »

Если создать пакет, например, для ubuntu и затребовать в зависимости Qt 5.1, то как установить свою программу в ubuntu 12.04 LTS?

Добавить Qt5 через ppa? Я не говорю, что пакеты - единственно правильно, если нет другого выхода, что бывает очень редко, можно компилировать статически или таскать все dll с собой. И даже в этих случаях могут быть проблемы - Webkit не поддерживает статику, а в с случае с кучей DLL они должны быть скомпилированы на более старой системе.
Записан
vohulg
Гость
« Ответ #11 : Сентябрь 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"

Как загрузить эти платформы ?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Сентябрь 06, 2013, 14:30 »

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

Qt 5.11/4.8.7 (X11/Win)
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #13 : Сентябрь 07, 2013, 08:50 »

vohulg, вы проверяете ldd свое приложение. так проверте с помощью ldd и плагин libqtxcb.so, посмотрите что ему не хватает.
Записан
vohulg
Гость
« Ответ #14 : Сентябрь 09, 2013, 07:23 »

vohulg, вы проверяете ldd свое приложение. так проверте с помощью ldd и плагин libqtxcb.so, посмотрите что ему не хватает.

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

Причем получается что для запуска приложения надо чтобы в одной папке с исполняемым файлом лежала папка /platforms c содержимым из библиотеки Qt (/path/to/Qt/plugins/platforms/*)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.061 секунд. Запросов: 23.