Название: "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? Можно это сделать. Можно собрать свою версию Qt, отвязаться от зависимостей, переписать всё на чистый C++ без заимствованных проприетарных решений. Вот только по затратам это дорого и глупо. Зачем переписывать то, что хорошо работает?Если нет, то я где-то слышал о возможности избавиться хотя бы от icu (тут, вроде бы, отключение вебкита) и mingw библиотек - это возможно? Название: 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 вместо серии мелких? Др дело это неразумно/непрактично - то даТ.е. слепить имея большой секс скорее-всего получится, но работать не будет. |