Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: cuzace от Декабрь 25, 2014, 02:04



Название: "Static" .dll
Отправлено: cuzace от Декабрь 25, 2014, 02:04
Здравствуйте.
Насколько я понял, существуют 2 очевидных варианта сборки:
1. Полностью динамическая, требующая распространения вместе с приложением множество Qt, mingw и, что самое неприятное, огромных icu дллок. Их много, они много весят и выглядит все это не слишком приятно. Ко всему прочему, такой метод вызывает дополнительные проблемы, судя по http://habrahabr.ru/post/188816/
2. Полностью статическая, которая нормально работает, но требует полной перекомпиляции.
Отсюда вопрос - возможно ли комбинировать оба варианта? А именно - получить статическую .exe и "статическую" (оксюморон, конечно) .dll, которая не будет требовать дополнительные либы.
Сделать это обычными методами не получилось, статические .exe работают нормально и везде, как и нужно, а вот .dll в обычном виде требуют библиотеки от используемых в них классов, а собственно "статические длл" получить не удается, вместо них собираются lib*.a.


Название: Re: "Static" .dll
Отправлено: Пантер от Декабрь 25, 2014, 08:15
На неделе обсуждалось, поищи. ИМХО, статика нафиг не нужна.


Название: Re: "Static" .dll
Отправлено: Bepec от Декабрь 25, 2014, 08:28
У вас неправильные предпосылки. Вы рассматриваете статью Qt 5.1, она тогда была ещё совсем сырая. В текущих версиях проблем не будет, ну а что dll таскать надо - так никакой проблемы нет.


Название: Re: "Static" .dll
Отправлено: cuzace от Декабрь 25, 2014, 10:06
Если такая проблема существует в сырой версии, то вполне возможно, что она когда-то (в самый неудобный момент) появится вновь, в то время, как в статическом варианте ее в принципе не должно быть - собрал и забыл.
Сама по себе статика вполне нужна, по крайней мере чисто психологически - не очень приятно следить за "левыми" либами, при том, что их много, они странно называются и очень много весят, особенно icu (не нужная мне на первый взгляд библиотека, весящая больше самого приложения - явно не ок). Удобнее было бы заниматься с аккуратным .exe, в котором находится все, что обновлять не планируется, и собственными дллками, в которые вынесены части, требующие частой перекомпиляции. По крайней мере больший контроль, выбор и возможности - лучше, чем их отсутствие.
Да и в принципе интересна возможность осуществления подобного, если в .exe можно поместить все, что ему нужно, то почему так нельзя сделать с .dll?
Если нет, то я где-то слышал о возможности избавиться хотя бы от icu (тут, вроде бы, отключение вебкита) и mingw библиотек - это возможно?


Название: Re: "Static" .dll
Отправлено: Igors от Декабрь 25, 2014, 10:20
Да и в принципе интересна возможность осуществления подобного, если в .exe можно поместить все, что ему нужно, то почему так нельзя сделать с .dll?
Возможно, но потребуется основательно поработать с проектом, готовых таких сборок я не знаю. И повторять эту процедуру при каждом обновлении. Оно Вам надо?

Вас волнует что "много файлов в папке/мамке приложения" выглядит неопрятно? Ну во-первых это стандартная практика на Вындоуз. Во-вторых можно сложить все dll напр в ту же в папку "platfоrms" и использовать "delay loaded DLL" - работает для всех Qt dll. Но OSX есть еще лучшее стандартное решение. На Linux - проконсультируйтесь с тамошним экспертом.

Эта тема уже набила оскомину, понятно почему сначала хочется статику, но рано или поздно перейдете на динамику (как подавляющее большинство)


Название: Re: "Static" .dll
Отправлено: Bepec от Декабрь 25, 2014, 10:40
Если такая проблема существует в сырой версии, то вполне возможно, что она когда-то (в самый неудобный момент) появится вновь, в то время, как в статическом варианте ее в принципе не должно быть - собрал и забыл.
С таким же успехом у нас на земле могут появиться динозавры. Шанс есть, но он пренебрежительно малый и проблема выдумана.

Сама по себе статика вполне нужна, по крайней мере чисто психологически - не очень приятно следить за "левыми" либами, при том, что их много, они странно называются и очень много весят, особенно icu (не нужная мне на первый взгляд библиотека, весящая больше самого приложения - явно не ок). Удобнее было бы заниматься с аккуратным .exe, в котором находится все, что обновлять не планируется, и собственными дллками, в которые вынесены части, требующие частой перекомпиляции. По крайней мере больший контроль, выбор и возможности - лучше, чем их отсутствие.
Очередная выдуманная проблема. Положите все dll в папку Windows и будет у вас всё хорошо. И работать вы будете только с exe приложения. Проблема в том, что вы судите по программам, дллки которых лежат как раз там :)

Да и в принципе интересна возможность осуществления подобного, если в .exe можно поместить все, что ему нужно, то почему так нельзя сделать с .dll?
Если нет, то я где-то слышал о возможности избавиться хотя бы от icu (тут, вроде бы, отключение вебкита) и mingw библиотек - это возможно?
Можно это сделать. Можно собрать свою версию Qt, отвязаться от зависимостей, переписать всё на чистый C++ без заимствованных проприетарных решений. Вот только по затратам это дорого и глупо. Зачем переписывать то, что хорошо работает?


Название: Re: "Static" .dll
Отправлено: Fregloin от Декабрь 25, 2014, 11:15
Сделайте свой инсталлятор в котором будут все нужные либы + ваше ПО и забейте на сомнения. Это не делфи, где все в один экзешник льется (хм по сути статика).


Название: Re: "Static" .dll
Отправлено: cuzace от Декабрь 25, 2014, 11:41
Если в новых версиях проблем нет и не должно быть, надо попробовать.
Хотя все-таки кажется корректным хранить то, что не подразумевает изменения в самом .exe, причем не только библиотеки, но и любые другие файлы. Имо, такая схема была бы удобной - имеем редкообновляемый .exe определенной версии и .dll совместимые именно с этой версией .exe. Вполне изящно и никаких проблем с зависимостями. Хотя, получается что это само по себе является проблемой.
Цитировать
Возможно, но потребуется основательно поработать с проектом, готовых таких сборок я не знаю. И повторять эту процедуру при каждом обновлении. Оно Вам надо?
А есть статьи/примеры, как это сделать?
Цитировать
Можно это сделать. Можно собрать свою версию Qt, отвязаться от зависимостей, переписать всё на чистый C++ без заимствованных проприетарных решений. Вот только по затратам это дорого и глупо. Зачем переписывать то, что хорошо работает?
Про mingw (не Qt) библиотеки слышал, что это именно "просто".


Название: Re: "Static" .dll
Отправлено: Bepec от Декабрь 25, 2014, 12:05
Qt вам даёт простой и работающий проект. Даже не знающий с++ может написать программку на Qt. Конечно это будет шлак в глазах профессионалова, но всё же.

Вы ищете какое то "простое" решение, а на самом деле отрицаете простоту динамических библиотек :D


Название: Re: "Static" .dll
Отправлено: GreatSnake от Декабрь 25, 2014, 12:11
Отсюда вопрос - возможно ли комбинировать оба варианта? А именно - получить статическую .exe и "статическую" (оксюморон, конечно) .dll, которая не будет требовать дополнительные либы.
По определению невозможно.
Т.е. слепить имея большой секс скорее-всего получится, но работать не будет.


Название: Re: "Static" .dll
Отправлено: torwig от Декабрь 26, 2014, 11:02
С инсталлятором вам все верно советуют. Исполняемый файл, библиотеки .dll туда, файлы конфигов и пр туда засовываете. Он все копирует куда надо, создает ярлык на рабочем столе, строчку в меню Пуск и т.д. Пользователь не видит ваших .dll. Потом вам еще захочется обновлять свое приложение.. ;)
п.с. В Хроме, например, в папке Google есть chrome.exe, рядом с ним папка с конкретной версией, и там уже chrome.dll (и многие другие нужные для работы файлы), откуда собственно все и начинается.


Название: Re: "Static" .dll
Отправлено: Igors от Декабрь 26, 2014, 11:13
По определению невозможно.
Т.е. слепить имея большой секс скорее-всего получится, но работать не будет.
Не вижу почему, что (принципиально) мешает иметь 1 dll вместо серии мелких? Др дело это неразумно/непрактично - то да