Название: Переносимое приложение на Qt. Запускается, но не подгружает иконки. Отправлено: xintrea от Октябрь 30, 2010, 01:50 Здравствуйте!
Готовлю сейчас релиз своего Qt-приложения. Хочу облегчить жизнь пользователям, чтобы они могли запустить программу на любом дистрибутиве, просто распаковав каталог. Поэтому делаю релиз в виде переносимого приложения. Система, на которой я пишу программу - Debian Stable. Система, на которой пытаюсь запустить программу - Ubuntu 10.10. Я создал подкаталог ./lib относительно бинарника, куда должны копироваться библиотеки, и написал скрипт запуска mytetra.run: Код: #!/bin/sh Затем начал экспериментировать с библиотеками. У меня установлена самосборная Qt 4.5, под которой и скомпилена программа. Вначале я решил не добавлять свои самосборные библиотеки из /usr/lib, а воспользоваться теми, которые идут в комплекте cо всякими QtCreator сборки компании Nokia, ведь эти программы запускаются на всех дистрибутивах. Мне нужны вот такие библиотеки: Код: lrwxrwxrwx 1 xi xi 18 Окт 30 00:57 libQtCore.so -> libQtCore.so.4.5.3 Вначале решил проверять, как будет запускаться программа через mytetra.run на исходной системе, в которой я и провожу разработку. Для этого я начал наполнять каталог ./lib библиотеками. 1. Вначале попробовал взять библиотеки Qt 4.5 от QtCreator-0.9.1. Программа стала запускаться из скрипта mytetra.run. Однако, ни одна SVG-иконка на кнопках не показывается. Выглядит это дело так: http://rghost.ru/3088503/image.png (http://rghost.ru/3088503/image.png). 2. Тогда попробовал взять библиотеки Qt 4.7 от QtCreator-2.0.1. Программа запускается из скрипта mytetra.run. Однако, ни одна SVG-иконка на кнопках не показывается, плюс почему-то используется другой шрифт. Выглядит это дело так: http://rghost.ru/3088525/image.png (http://rghost.ru/3088525/image.png). 3. Мне ничего не оставалось, как скопировать свои самосборные библиотеки. С ними программа, как и ожидалось, запускается нормально, SVG-иконки на кнопках стали видны. Выглядит так: http://rghost.ru/3088509/image.png (http://rghost.ru/3088509/image.png). Затем я скопировал каталог с этим дистрибутивом программы (с самосборными библиотеками) на Ubuntu, попытался запустить через mytetra.run. Вначале программа ругнулась на отсутсвия libasound.so.2. Ну чтож, скопировал из Debian в каталог ./lib и её. После этого программа запустилась. Но SVG-иконки почему-то невидны! Вот так: http://rghost.ru/3088495/image.png (http://rghost.ru/3088495/image.png). То есть, в Debian иконки видны, а в Ubuntu - невидны, с одними и теми же Qt библиотеками. И вот я незнаю, что еще нужно сделать, чтоб в Ubuntu стали нормально отображаться SVG-иконки. Самое интересное, что ldd на исполняемом файле в Debian выдает такой список: Код: linux-gate.so.1 => (0xb7f81000) Та же команда на том же бинарнике в Ubuntu (с установленной переменной LD_LIBRARY_PATH) выдает такой список: Код: linux-gate.so.1 => (0x00345000) Отличия можно посмотреть на этой картинке: http://rghost.ru/3088444/image.png (http://rghost.ru/3088444/image.png). Сверху идут только Qt-библиотеки, они, естественно, отличаются путем. Далее идут системные библиотеки. Где-то пути различны, где-то совпадают, неважно. Под конец одной библиотеки нет в Ubuntu, зато есть другая. Вот и всё различие. Я думал, что может в Ubuntu нет какой-то библиотеки типа libsvg, но она и не используется, так что на нее нечего грешить. Вопросы: 1. Чего не хватает в фирменных либах Qt 4.5 и Qt.4.7 от разных QtCreator, что не показываются SVG иконки? 2. Чего не хватает в Ubuntu, что с либой, с которой в Debian иконки есть, с той же либой в Ubuntu SVG-иконок нет? ЗЫЖ Иконки у меня в программе подгружаются двумя способами. 1. С обычного файла, например так: Код
2. Из файла ресурсов: Код
Ни та ни другая иконка не показывается, так что есть подозрение, что проблемма где-то в отрисовке, но никак не в загрузке. Название: Re: Переносимое приложение на Qt. Запускается, но не подгружает иконки. Отправлено: Rcus от Октябрь 30, 2010, 07:55 Даже странно, вроде для загрузки svg в QIcon требовался plugins/iconengines/libqsvgicon.so, но его почему-то не видно...
Блин это ж ldd... правильная команда для просмотра загружаемых библиотек это cat /proc/`pidof $APPNAME`/maps (| grep 'r-xp' по желанию) Название: Re: Переносимое приложение на Qt. Запускается, но не подгружает иконки. Отправлено: GreatSnake от Октябрь 30, 2010, 11:35 Цитировать Хочу облегчить жизнь пользователям Такими скриптами и загрузкой файлов "./*" вы им только усложните жизнь.Получается, что ваша программа должна запускаться только из каталога куда её установят. Так делать нельзя. Нужно сделать install скрипт, который будет создавать скрипт запуска вашей программы, в котором будет выставляться переменная среды типа YOUR_PROGRAMM_INSTALL_DIR. Уже в приложении получать значение этой переменной и по этому значению формировать путь к вашим файлам. И этот скрипт запуска выложить куда-нибудь в /usr/local/bin или в /opt/bin в зависимости от дистрибутива. Название: Re: Переносимое приложение на Qt. Запускается, но не подгружает иконки. Отправлено: andrew.k от Ноябрь 03, 2010, 14:15 Ни та ни другая иконка не показывается, так что есть подозрение, что проблемма где-то в отрисовке, но никак не в загрузке. нужно рядом с программой положить деректорию imageformats и в нее положить соответствующие библиотеки из QTDIR/plugins/imageformatsНапример, libqjpeg.so. У меня заработало только в таком виде. если класть библиотеки рядом с программой - не работает. Строго так. Это естественно касательно случая, когда нужно запустить программу на компе, на котором отсутствует кути. Если на компе будет прописана правильно QTDIR и кути будет подходящей версии, то плагины подгрузятся оттуда. |