Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: abodnya от Апрель 24, 2013, 16:01



Название: Переносимость Qt программ на Linux
Отправлено: abodnya от Апрель 24, 2013, 16:01
Возникла следующая проблема:
У меня имеется исполняемый файлик программы для линукса (компилил на Ubuntu 12.04). Поскольку, у меня установлен QtSDK, проблем с запуском и поиском либ у меня нету, всё хорошо запускается.
Попробывал скинуть свою програмку другу, у которого Debian 6.0.6, у него программа выдала ошибку о том, что не найдена библиотека libQt5Widgets.5.so. Вместе с программой я также ему дал все нужные либы в папке с программой.
Состав папки:
Код:
$ ls -i -R
.:
 3351105 imageformats          11813407 libicuuc.so.49.1.2       11813410 libQt5Gui.so.5.0.0       3351104 QImageViewer
11813405 libicudata.so.49.1.2  11813408 libqgsttools_p.so.1.0.0  11813411 libQt5Widgets.so.5.0.0
11813406 libicui18n.so.49.1.2  11813409 libQt5Core.so.5.0.0       3351119 platforms

./imageformats:
3351115 libqgif.so  3351118 libqjpeg.so  3351110 libqtga.so  3351112 libqtiff.so  3351114 libqwbmp.so

./platforms:
3351120 libqlinuxfb.so  3351121 libqminimal.so  3351124 libqxcb.so
Пробывали кидать эту либу libQt5Widgets.so.5.0.0 в:
/usr/lib
/usr/lib/qt5
/usr/local/lib
пробывали также переименовывать на libQt5Widgets.so.5
Ничего не помогло. Подскажите куда нужно кидать эти либы, или же как заставить программу искать либы в папке с собой ?


Название: Re: Переносимость Qt программ на Linux
Отправлено: abodnya от Апрель 24, 2013, 16:06
Может быть давать пользователю предложение скачать с определенного репозитория необходимые пакеты для запуска?
Тогда какие именно пакеты нужны и в каком репозитории лучше их искать (как известно в дебиане репы времен динозавров и либ пятого кьюта там точно нет)


Название: Re: Переносимость Qt программ на Linux
Отправлено: maint от Апрель 24, 2013, 16:21
бросаем все это барахло, скажем, в /usr/local/lib. Потом от имени администратора набираем ldconfig.Запускаем, если не сработает, тогда плюем на все или собираем в статическую версию программы


Название: Re: Переносимость Qt программ на Linux
Отправлено: Vass от Апрель 24, 2013, 17:17
(как известно в дебиане репы времен динозавров и либ пятого кьюта там точно нет)

Сами вы времен динозавров :)
Все там уже есть
http://perezmeyer.blogspot.ru/2013/04/on-road-to-qt-5-qt-5-base-tools.html


Название: Re: Переносимость Qt программ на Linux
Отправлено: Alex Custov от Апрель 24, 2013, 18:35
Сами вы времен динозавров :)
Все там уже есть
http://perezmeyer.blogspot.ru/2013/04/on-road-to-qt-5-qt-5-base-tools.html

Debian 6 уже довольно старенький, а Qt5 буквально на днях прошла Debian QA и будет пока только в experimental, и почти наверняка потребует обновить половину системы.


Название: Re: Переносимость Qt программ на Linux
Отправлено: abodnya от Апрель 24, 2013, 19:26
Может решить проблему, собрав deb пакет и вписав в него нужные зависимости?
Кто-то может подсказать как лучше через ckeckinstall создавать deb пакеты, которые нормально поставятся в /usr/bin и будут отображаться в меню?


Название: Re: Переносимость Qt программ на Linux
Отправлено: Fat-Zer от Апрель 24, 2013, 20:27
Может решить проблему, собрав deb пакет и вписав в него нужные зависимости?
можно, так правильно, но лучше собрать бинарник с qt4... по крайней мере до тех пор пока пятёрка не будет использоваться повсеместно...
Кто-то может подсказать как лучше через ckeckinstall создавать deb пакеты, которые нормально поставятся в /usr/bin и будут отображаться в меню?
чтобы отображалась иконка в меню нужно закинуть .desktop файл в /usr/share/applications/ (или другую поддиректорию applications из директорий указанных в $XDG_DATA_DIRS). сам desktop файл легко составляется по-аналогии... довольно скудные доки по формату есть на freedesktop.org.

Пробывали кидать эту либу libQt5Widgets.so.5.0.0 в:
/usr/lib
/usr/lib/qt5
/usr/local/lib
пробывали также переименовывать на libQt5Widgets.so.5
Ничего не помогло. Подскажите куда нужно кидать эти либы, или же как заставить программу искать либы в папке с собой ?
библиотеку не забыл исполняемой сделать?


Название: Re: Переносимость Qt программ на Linux
Отправлено: Alex Custov от Апрель 24, 2013, 21:01
библиотеку не забыл исполняемой сделать?

библиотека может быть без атрибута x


Название: Re: Переносимость Qt программ на Linux
Отправлено: Fat-Zer от Апрель 24, 2013, 23:50
библиотека может быть без атрибута x
да... и правда...


Название: Re: Переносимость Qt программ на Linux
Отправлено: abodnya от Апрель 24, 2013, 23:53
Половину проблемы решили.
Перед запуском нужно вручную указывать папку с прогой для поиска либ. Т.е. запуск выполнять так:
LD_LIBRARY_PATH="путь к папке с прогой" ./QImageViewer

Ну и либы нужно все переименовать, убрать последние 2 цифры (версию либы) для корректной работы
P.S: помог гайд http://www.stableit.ru/2010/03/so-cannot-open-shared-object-file-no.html

теперь другая проблема. Программа не видит папку platforms и соответственно выдает ошибку/
Код:
mkus@MComputer:~/Рабочий стол/QImageViewerLinux$ LD_LIBRARY_PATH=/home/mkus/Загрузки ./QImageViewer
Failed to load platform plugin "xcb". Available platforms are:
linuxfb
minimal
xcb


Название: Re: Переносимость Qt программ на Linux
Отправлено: abodnya от Апрель 25, 2013, 00:23
Прогуглив и поэксперементировав вышло запустить на платформе minimal. Но всеравно ошибки есть.

Код:
mkus@MComputer:~/Рабочий стол/QImageViewerLinux$ LD_LIBRARY_PATH=/home/mkus/Загрузки ./QImageViewer -platform minimal
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqlinuxfb.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqlinuxfb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.1",
"MetaData": {
"Keys": [
"linuxfb"
]
},
"className": "QLinuxFbIntegrationPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("linuxfb")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqminimal.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqminimal.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.1",
"MetaData": {
"Keys": [
"minimal"
]
},
"className": "QMinimalIntegrationPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqxcb.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.1",
"MetaData": {
"Keys": [
"xcb"
]
},
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("xcb")
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/platforms/libqminimal.so"
"ru_UA"
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqgif.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqgif.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"gif"
]
},
"className": "QGifPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("gif")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqico.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqico.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"ico"
]
},
"className": "QICOPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("ico")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqjpeg.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqjpeg.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"jpg",
"jpeg"
]
},
"className": "QJpegPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("jpg", "jpeg")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqmng.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqmng.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"mng"
],
"MimeTypes": [
"image/x-mng"
]
},
"className": "QMngPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("mng")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqsvg.so"
Found metadata in lib /home/mkus/Рабочий
00:20:53
стол/QImageViewerLinux/imageformats/libqsvg.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"svg",
"svgz"
]
},
"className": "QSvgPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("svg", "svgz")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqtga.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqtga.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"tga"
],
"MimeTypes": [
"image/x-tga"
]
},
"className": "QTgaPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("tga")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqtiff.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqtiff.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"tiff",
"tif"
],
"MimeTypes": [
"image/tiff",
"image/tiff"
]
},
"className": "QTiffPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("tiff", "tif")
QFactoryLoader::QFactoryLoader() looking at "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqwbmp.so"
Found metadata in lib /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqwbmp.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"wbmp"
],
"MimeTypes": [
"image/vnd.wap.wbmp"
]
},
"className": "QWbmpPlugin",
"debug": false,
"version": 327680
}

Got keys from plugin meta data ("wbmp")
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqgif.so"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqico.so"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqjpeg.so"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqmng.so"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqsvg.so"
QLibraryPrivate::loadPlugin failed on "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqsvg.so" : "Cannot load library /home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqsvg.so: (libQt5Svg.so.5: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога)"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqtga.so"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqtiff.so"
loaded library "/home/mkus/Рабочий стол/QImageViewerLinux/imageformats/libqwbmp.so"
Ошибка сегментирования
P.S: нагуглили тут http://www.cubieforums.com/topic_173_0.html


Название: Re: Переносимость Qt программ на Linux
Отправлено: abodnya от Апрель 25, 2013, 00:47
Осталась только следующая проблема:
Код:
root@MComputer:/home/mkus/Рабочий стол/QImageViewerLinux# export QT_DEBUG_PLUGINS=0
root@MComputer:/home/mkus/Рабочий стол/QImageViewerLinux# LD_LIBRARY_PATH=/home/mkus/Загрузки ./QImageViewer -platform minimal
"ru_UA"
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
QFontDatabase: Cannot find font directory '/home/abodnya/Qt5.0.0/5.0.0/gcc/lib/fonts' - is Qt installed correctly?
Ошибка сегментирования
Они ссылаются на адрес, указаный в моем компьютере. Естественно у него этих файлов нет
НО И У МЕНЯ ТОЖЕ Оо


Название: Re: Переносимость Qt программ на Linux
Отправлено: ayalon от Май 19, 2013, 15:15
У меня была похожая проблема, плюс не мог подключить библиотеки , которые разместил в корневом каталоге. Решение своей проблемы написал на форуме (http://mittag.ru/forum/index.php?topic=2.msg2#msg2)