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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Размер библиотек Qt  (Прочитано 13241 раз)
quark
Гость
« : Февраль 19, 2010, 22:15 »

Библиотеки Qt весят довольно много: QtCore4.dll - 2,7 Mb, QtGui4.dll - 10,4 Mb.

Мне нужно как можно сильнее уменьшить общий размер приложения вместе с его библиотеками. Можно ли это как-то сделать? Например, выбросить из этих dll'ок неиспользуемую мной функциональность. Чтобы было в пределах объема дискеты.
Записан
BRE
Гость
« Ответ #1 : Февраль 19, 2010, 22:23 »

Библиотеки Qt весят довольно много: QtCore4.dll - 2,7 Mb, QtGui4.dll - 10,4 Mb.

Мне нужно как можно сильнее уменьшить общий размер приложения вместе с его библиотеками. Можно ли это как-то сделать? Например, выбросить из этих dll'ок неиспользуемую мной функциональность. Чтобы было в пределах объема дискеты.
Можно попробовать собрать статически, но кажется мне что при использовании GUI она все равно на дискету не поместиться.

[off]Неужели где-то еще дискетами пользуются?  Строит глазки[/off]
Записан
Sancho_s_rancho
Гость
« Ответ #2 : Февраль 19, 2010, 22:35 »

Эта тема поднималась уже много раз.
Соберите куте с оптимизацией -Os(ключ оптимизации по размеру для компилятора mingw32 )
На этапе configure указать ключ -no-exceptions (если вы исключениями не пользуетесь). Использование данного ключа уменьшит размер файлов  на 15-20%. Для уменьшения размера исполняемых файлов и разделяемых библиотек может быть использован упаковщик исполняемых файлов UPX.
Но может вы просто неправильно выбрали инструменты? Подумайте о fltk или вообще о связке языка C с прямым вызовом api-шных функций ОС.
Записан
quark
Гость
« Ответ #3 : Февраль 19, 2010, 23:05 »

Эта тема поднималась уже много раз.
Соберите куте с оптимизацией -Os(ключ оптимизации по размеру для компилятора mingw32 )
На этапе configure указать ключ -no-exceptions (если вы исключениями не пользуетесь). Использование данного ключа уменьшит размер файлов  на 15-20%. Для уменьшения размера исполняемых файлов и разделяемых библиотек может быть использован упаковщик исполняемых файлов UPX.
И что получится по объему в результате при использовании -no-exceptions вместе с -Os?

Искал по "размер qt dll" и нашел пока только http://www.prog.org.ru/topic_3974_0.html Про -Os там забыли упомянуть, -no-exceptions есть. Ну и еще кучу опций компиляции отключили, вот только безопасно ли это?.

Но может вы просто неправильно выбрали инструменты? Подумайте о fltk или вообще о связке языка C с прямым вызовом api-шных функций ОС.
Мне нужна работа с базами данных, которой нет в fltk(и не должно быть, так как это GUI toolkit). В Qt мне нравится подход "все в одном"  с хорошей интеграцией этого всего и наличие так сказать прослойки над С++, которая уменьшает вероятность внесения багов за счет низкоуровневой работы.  Ну и графический дизайнер интерфейса тоже не помешает.

С с OS API для моей задачи это сильный перебор, у меня просто навороченная морда над БД с графиками и т. п.
Записан
Sancho_s_rancho
Гость
« Ответ #4 : Февраль 19, 2010, 23:22 »

Даже если вы пересоберете библиотеку выкинув все "лишнее", и упаковщиком еще пройдетесь, то размер уменьшится мегабайт до 3-4, т.е. на дискету 1,44 мб вы все равно не влезите. В добавок вам необходимо будет помнить о созданных вами же ограничениях при разработке и/или поддержке ПО.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Февраль 20, 2010, 09:00 »

>>Неужели где-то еще дискетами пользуются?
Ага, я с такой же фигнёй маялся, пришлось архив нарезать на клочки и коробку дискет отправить заказчику. Улыбающийся
Просто комп далеко в тайге стоит, и USB'ей даже примерно нету и виндовоз 98 и CD'юка нету, вообще алес
Записан

Юра.
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #6 : Февраль 20, 2010, 17:18 »

Но может вы просто неправильно выбрали инструменты? Подумайте о fltk или вообще о связке языка C с прямым вызовом api-шных функций ОС.
Мне нужна работа с базами данных, которой нет в fltk(и не должно быть, так как это GUI toolkit). В Qt мне нравится подход "все в одном"  с хорошей интеграцией этого всего и наличие так сказать прослойки над С++, которая уменьшает вероятность внесения багов за счет низкоуровневой работы.  Ну и графический дизайнер интерфейса тоже не помешает.
У вас противоречие целей и "нравицо". Поддерживаю Sancho_s_rancho, определитесь уж че важнее..
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
mcrads
Гость
« Ответ #7 : Февраль 20, 2010, 18:29 »

Может вам следует строже относиться к включаемым модулям? например #include <QtGui> подключит весь модуль ГУЯ, а может вам оттуда нужно всего то QPushButton & QLabel? и тогда можно вместо включения всего куска весом в 4-5 Мб включить его элементы по 300Кб максимум. поэтому я бы посоветовал внимательнее следить за включаемыми модулями и контролировать каждый самому. даже из ядра кути QtCore. Ну и конечно же статическая сборка - это не оспаривается даже, это обязательно =)
Записан
SABROG
Гость
« Ответ #8 : Февраль 21, 2010, 02:03 »

Может вам следует строже относиться к включаемым модулям? например #include <QtGui> подключит весь модуль ГУЯ, а может вам оттуда нужно всего то QPushButton & QLabel? и тогда можно вместо включения всего куска весом в 4-5 Мб включить его элементы по 300Кб максимум. поэтому я бы посоветовал внимательнее следить за включаемыми модулями и контролировать каждый самому. даже из ядра кути QtCore. Ну и конечно же статическая сборка - это не оспаривается даже, это обязательно =)

Не важно как ты подключаешь:

Код
C++ (Qt)
#if 0
#include <QtGui> // так
#else
#include <QtGui/QLabel> // или так
#endif
 

Qt помещает ВСЕ классы в .dll на этапе компиляции Qt. Даже если ты используешь один самый маленький класс, но из модуля QtGui, то тебе придется тащить с собой весь модуль. Так как этими .dll могут пользоваться и другие программы написанные на Qt. Когда Qt собрана в статике, то компилятор сам выкидывает не нужное, то что ты не используешь. Но, если классы Qt внутри себя используют что-то то это выкинуто не будет. Например везде используется QString, это означает, что за ним потянутся все классы, которые как-то влияют на его работу, например QTextCodec с полным набором всевозможных кодировок, которые могут даже и не использоваться никогда тобой лично или самой Qt. Диаграмму зависимостей можно посмотреть здесь, правда она устарела на 3 года.
Записан
mcrads
Гость
« Ответ #9 : Февраль 21, 2010, 10:12 »

хм. догадывался, но не знал. но получается все равно чуть меньше чем при просто статике.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #10 : Февраль 21, 2010, 13:57 »

Цитировать
так сказать прослойки над С++, которая уменьшает вероятность внесения багов за счет низкоуровневой работы
ерунда какая-то при использование библиотеки Qt обращение по нулевому или битому указателю будет также как и везде печально, и памячть тоже затереть можно - не понимаю о какой оболочке речь...

Цитировать
Qt помещает ВСЕ классы в .dll на этапе компиляции Qt.
вы имеете ввиду что линкер это делает при динамической линковке любых либ а не только Qt

Цитировать
хм. догадывался, но не знал. но получается все равно чуть меньше чем при просто статике.
почему чуть меньше? так же абсолютно - либа линкуется полностью.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Февраль 21, 2010, 19:45 »

>>Может вам следует строже относиться к включаемым модулям? например #include <QtGui> подключит весь модуль ГУЯ

Это влияет только на скорость компиляции, т.к. компилятор вынужден просматривать большую пачку заголовочных файлов.
Записан

Юра.
mcrads
Гость
« Ответ #12 : Февраль 21, 2010, 21:14 »

для интереса перепроверился - ок. 300Кб меньше при описывании отдыльно. хотя может я просто собираю без ключика -no-exceptions - потому и сложилось такое впечатление))
Записан
quark
Гость
« Ответ #13 : Февраль 22, 2010, 00:34 »

каждый самому. даже из ядра кути QtCore. Ну и конечно же статическая сборка - это не оспаривается даже, это обязательно =)
К сожалению, не получится. Мне нужна LGPL лицензия. А для статики Qt идет под GPL или платной.
Записан
crackedmind
Гость
« Ответ #14 : Февраль 22, 2010, 07:03 »

-no-stl -no-qt3support позволят еще несколько уменьшить размер dll'ок Улыбающийся Но ИМХО при всем желании не выйдет уменьшить до такой степени чтоб влезало на дискету
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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