Russian Qt Forum

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



Название: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: abodnya от Апрель 12, 2013, 16:49
У меня стоит Qt5, у друга Qt4. Я написал курсач с использованием QtOpenGL, но друг не может у себя его запустить, т.к. не хватает либы  libQt5OpenGL.so.5
Как ему запустить мой курсач, при этом не ставя себе Qt5 ?
Могу ли я прикладывать к исполняемому файлу эту либу так, чтоб программа искала эту либу в текущей папке, а не в системном каталоге?
И могу ли я заставить QtCreator автоматически прикладывать эти либы к готовому файлу?

Еще вопрос. Аналогичная ситуация у меня если компилю под винду. Приходится тащить с собой кучу тяжелых dll-ок. Как я могу настроить программу так, чтоб она создавала одну единую dll-ку со всеми нужными мне функциями, а не используемые в dll не добавляла, чтоб на выходе доп.библиотеки к программе весили на порядок меньше?


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: Bepec от Апрель 12, 2013, 16:57
DLL зависимости появляются от того, какие компоненты ты использовал в программе. То, что ты не использовал - с тебя программа и не потребует.

Да, чтобы программа запускалась на других компах, необходимо таскать с собой DLL.

Да, ты можешь собирать программу статически (1 файл), но для этого нужно собрать статически всю Qt и познать дзен.

Да, (уверен на 50%) ты можешь заставить QtCreator копировать dll в папку с релизом твоей программы :D

PS тяжёлые это 10 мб? ну ну.


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: abodnya от Апрель 12, 2013, 17:19
Ну там идет одна длл-ка на 180 мб (вроде бы QtGuid.dll, не уверен точно), для программы. которая весит меньше мегабайта таскать с собой 180 мб неразумно как по мне. Если б либа была и правда 10 мб, это не составляло б проблемы.

Можно пожалуйста получить ссылки на гайды, желательно на русском, но можно и на английском?


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: alex312 от Апрель 12, 2013, 17:23
Ну там идет одна длл-ка на 180 мб (вроде бы QtGuid.dll, не уверен точно), для программы. которая весит меньше мегабайта таскать с собой 180 мб неразумно как по мне. Если б либа была и правда 10 мб, это не составляло б проблемы.
А ты не таскай отладочную версию, таскай релизную.  ;)


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: Bepec от Апрель 12, 2013, 17:29
Ссылки не получить. Это аксиомы, получаемые опытным путём :D

Пару слов о dll в Qt. Все dll с буквой d на конце - дебажные.
Дебаг сборка программы - она для отладки и не предназначена для использования и передачи. Она настолько огромна, потому что содержит отладочную информацию.

Потому что надо делать - собрать релизную версию программы и тянуть релизные dll (без d).

Минимальная сборка программы составляет около 5 мб (для Qt 4.7.2).


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: abodnya от Апрель 12, 2013, 17:32
Спасибо за ответ) Теперь буду только релизную версию юзать для передачи программ)

Остался открытым второй вопрос. Могу ли я также таскать *.so линуксные либы с прогой, как я это делаю сейчас под виндой?
Или в линуксе пользователь обязан ставить необходимые пакеты через apt-get ?


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: maint от Апрель 12, 2013, 17:46
Спасибо за ответ) Теперь буду только релизную версию юзать для передачи программ)

Остался открытым второй вопрос. Могу ли я также таскать *.so линуксные либы с прогой, как я это делаю сейчас под виндой?
Или в линуксе пользователь обязан ставить необходимые пакеты через apt-get ?
это смотря какой линух. Может и не apt-get, а yum скажем. Добра хватает  :-). В принципе, если линухи одноименные и одной версии, то можно и с собой. Либо бросить в какой-нибудь /usr/local/lib. В теории можно в один каталог с программой и запускать.


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: Bepec от Апрель 12, 2013, 18:28
Линуксов дофига версий со своими особенностями. Потому скомпиленное на одном может не запуститься на другом.

Вывод? можно, но есть шанс некорректной работы.


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: abodnya от Апрель 12, 2013, 18:33
хорошо, как тогда мне сделать так, чтоб программа при первом запуске искала недостающие либы и давала запрос на их закачку, описывая точное название недостающих пакетов?


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: quiet_readonly от Апрель 12, 2013, 18:44
хорошо, как тогда мне сделать так, чтоб программа при первом запуске искала недостающие либы и давала запрос на их закачку, описывая точное название недостающих пакетов?
Сделать программу-обёртку, которая сама будет иметь минимум зависимостей и будет проверять наличие нужных библиотек (хоть бы и через ldd), при отсутствии предлагать установить (хоть бы и через package kit). Но это не принято в linux (и рабочих программ с таким трюком я не видел), лучше компилируйте с Qt4, особой разницы пока что нет.


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: abodnya от Апрель 12, 2013, 21:10
Уже перешел на Qt5 ) Вот всё жду пока у них поддержка Android и iOS полностью наладится, та и написание приложений под Ubuntu Phone пока импонирует


Название: Re: Как заставить IDE при компилировании прикладывать к исполняемому файлу либы?
Отправлено: PinkPanther от Апрель 27, 2013, 04:19
Года четыре назад я написал небольшую утилиту (с использованием Qt 4.3, кажется) и выложил на сайт, ее скачало человек 200-300. Она использовала сеть, STL, немного виджетов. Чтобы с комфортом ее раздать, нашел torrents.ru инсталлятор, с помощью которого делают репаки игр. Скормил ему свой .exe, он сам нашел все нужные DLL, запаковал, и при распаковке DLL падали в каталог программы. От скачавших не поступило ни одной рекламации (видимо, у всех все работало), файл-инсталлер весил несколько мегабайт.