Russian Qt Forum
Ноябрь 01, 2024, 15:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: "Static" .dll  (Прочитано 6344 раз)
cuzace
Гость
« : Декабрь 25, 2014, 02:04 »

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 25, 2014, 08:15 »

На неделе обсуждалось, поищи. ИМХО, статика нафиг не нужна.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Декабрь 25, 2014, 08:28 »

У вас неправильные предпосылки. Вы рассматриваете статью Qt 5.1, она тогда была ещё совсем сырая. В текущих версиях проблем не будет, ну а что dll таскать надо - так никакой проблемы нет.
Записан
cuzace
Гость
« Ответ #3 : Декабрь 25, 2014, 10:06 »

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

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Декабрь 25, 2014, 10:20 »

Да и в принципе интересна возможность осуществления подобного, если в .exe можно поместить все, что ему нужно, то почему так нельзя сделать с .dll?
Возможно, но потребуется основательно поработать с проектом, готовых таких сборок я не знаю. И повторять эту процедуру при каждом обновлении. Оно Вам надо?

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

Эта тема уже набила оскомину, понятно почему сначала хочется статику, но рано или поздно перейдете на динамику (как подавляющее большинство)
Записан
Bepec
Гость
« Ответ #5 : Декабрь 25, 2014, 10:40 »

Если такая проблема существует в сырой версии, то вполне возможно, что она когда-то (в самый неудобный момент) появится вновь, в то время, как в статическом варианте ее в принципе не должно быть - собрал и забыл.
С таким же успехом у нас на земле могут появиться динозавры. Шанс есть, но он пренебрежительно малый и проблема выдумана.

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

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

Сообщений: 1025


Просмотр профиля
« Ответ #6 : Декабрь 25, 2014, 11:15 »

Сделайте свой инсталлятор в котором будут все нужные либы + ваше ПО и забейте на сомнения. Это не делфи, где все в один экзешник льется (хм по сути статика).
Записан
cuzace
Гость
« Ответ #7 : Декабрь 25, 2014, 11:41 »

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

Qt вам даёт простой и работающий проект. Даже не знающий с++ может написать программку на Qt. Конечно это будет шлак в глазах профессионалова, но всё же.

Вы ищете какое то "простое" решение, а на самом деле отрицаете простоту динамических библиотек Веселый
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Декабрь 25, 2014, 12:11 »

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

Qt 5.11/4.8.7 (X11/Win)
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #10 : Декабрь 26, 2014, 11:02 »

С инсталлятором вам все верно советуют. Исполняемый файл, библиотеки .dll туда, файлы конфигов и пр туда засовываете. Он все копирует куда надо, создает ярлык на рабочем столе, строчку в меню Пуск и т.д. Пользователь не видит ваших .dll. Потом вам еще захочется обновлять свое приложение.. Подмигивающий
п.с. В Хроме, например, в папке Google есть chrome.exe, рядом с ним папка с конкретной версией, и там уже chrome.dll (и многие другие нужные для работы файлы), откуда собственно все и начинается.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Декабрь 26, 2014, 11:13 »

По определению невозможно.
Т.е. слепить имея большой секс скорее-всего получится, но работать не будет.
Не вижу почему, что (принципиально) мешает иметь 1 dll вместо серии мелких? Др дело это неразумно/непрактично - то да
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 23.