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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt,Windows: Размер статически слинкованной проги с Qt поверг в ужас  (Прочитано 15934 раз)
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« : Июль 03, 2009, 14:39 »

Качнул Qt SDK, собрал ее с ключом -static.

Написал простейшую программу с одним виджетом:
Код
C++ (Qt)
#include <QtGui/QApplication>
#include <QWidget>
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   QWidget w;
   w.show();
   return a.exec();
}

файл проекта:
Код
C++ (Qt)
TARGET = qttest
TEMPLATE = app
SOURCES += main.cpp

Размер исполняемого файла получил 11Мб  Шокированный
gcc-3.4, qt 4.5.1.

У всех так?
Записан

Гугль в помощь
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июль 03, 2009, 14:52 »

релиз или отладочная версия?
Записан

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

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Июль 03, 2009, 15:03 »

Qt собирал как релиз, в проекте тоже не указано что отладка, значит релиз. В Makefile заглянул - там оптимизации включены, отладочных ключей нет.

Вообще gcc способен на умную статическую линковку? или он тупо шьет все либы к экзешнику...

Кто каких размеров добивался и с каким компилятором?
Записан

Гугль в помощь
SABROG
Гость
« Ответ #3 : Июль 03, 2009, 15:17 »

Кто каких размеров добивался и с каким компилятором?

1,8Мб с MinGW. 11 Мб для статики нормально. Зато не придется ставить всякие redistributable как для msvc.

А вообще тема уже настолько заезженная, что повторяться в сотый раз не хочется.
Записан
CroCIV
Гость
« Ответ #4 : Июль 03, 2009, 15:29 »

Мне кааца это нормальный размер, Qt же не обращается к графической подсистеме винды. для управления своим гуём он использует свой собственный двиг, вот этот двиг и инклудится в екзешник, и запуская прилогу вначале прогружается в память этот двиг, а потом этот двиг начинает управлять формами твоего приложения. Тут нада ставить другой вопрос, почему екзешник получился такой маленький ? представляю каким бы был экзешник виндовой прилоги еслиб винда в него засунула свою подсистему вывода =))
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Июль 03, 2009, 15:53 »

1,8Мб с MinGW.
Это при каких условиях? с Qt или без?
Просто мне кажется, что линкер gcc очень туп, без разбора шьет все функции, которые есть в либе. Может его можно как-то образумить? Хотя..... я сейчас померял суммарный объем либ libQtCore.a и libQtGui.a - 25Мб. Все-таки он что-то из них выкинул В замешательстве

Тогда немного другой вопрос, можно ли добиться уменьшения объема, используя другие компиляторы?
Записан

Гугль в помощь
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #6 : Июль 03, 2009, 16:42 »

как я уже писал программа на .NET

300K кода + 300 мегобайт фреймворк

После этого QT милашка.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #7 : Июль 03, 2009, 17:48 »

ОФФТОП:

Этот вопрос становится самым частым и самым глупым мегобаяном...
Цитировать
Размер исполняемого файла получил 11Мб
Сори за эмоции, но я больше не могу....

Вы собираетесь свою программу с 1 виджетом засовывать в микропроцессор где доступно только 4 kb или как?. А игрушку поставьте - самую трешовую - с ублюдской анимацией, мыльными текстурами и двикжом трехлетней давности, городом мозданным из 3-х домов под разными углами поставленными методом копи - пасте - вас не удивит что она 15 Гб весит???
А виндовс XP - в самой минимальной устаноке сколько весит вас не удивляет - неужели менее 11 Mb, а виста сколько в минимуме займет? - Я бы тоже удивился если бы ваша программа 11 Гб весила а не Мб.

Мне кажестя эти вопросы возникают от непонимания что такое Qt и почему аналогичные программы написанные на MSVC(или на чем то еще) меньше весят -
1) ДА ПОТОМУ ЧТО В СЛУЧАЕ С MSVC аналогичные библиотеки уже имеются в системе
2) Qt кросплатформенная библиотека - надо иметь это ввиду и как бы понимать что код должен быть чуть сложнее чем реализации нативных возможностей 1-й системы, хотя я думаю это минимум размера добавляет

В свое время я программировал на Делфи - там программы весила меньше если соответствующие BPL (фактически DLL) опять же лежали в системп - а если слинковать статически - то размер как бы не 20 метров будет... (там такая опция есть)

Да и вообще сколько стоит жесткие диски сейчас - время думать не о размере на диске а о скорости разработки, выполнения, надежности программ. В сове время у меня был компьютер с диском 50 Мб - да тогда ч бы офигел от размера 10 м. экзешника - а сейччас даже не замечу...
« Последнее редактирование: Июль 05, 2009, 02:09 от break » Записан
ритт
Гость
« Ответ #8 : Июль 03, 2009, 20:48 »

break, окружи пост выше тэгами оффтопика Улыбающийся

CroCIV, лучше совсем не пиши, чем писать такое.

navrocky, кури qtconfig. если размер бинаря - важный аспект задачи, дополнительно можешь включить оптимизацию по размеру в ущерб производительности приложения. а ещё открой для себя UPX.
зы. линковщик в бинутилзах - чего его примешивать к гцц?
Записан
MURIK
Гость
« Ответ #9 : Август 02, 2009, 11:01 »

Просто надо писать не используя Qt.
Если так уж надо кроссплатформенность, то используйте... бейсик - PureBasic http://purebasic.info/
Я не шучу!

Вот пример проги, создающей окно с кнопкой
Код:
; Создаём окно.
OpenWindow(1,0,0,200,90,"Заголовок окна",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(2,64,30,80,25,"Кнопка")
 
Repeat; Начало главного цикла.
Event=WaitWindowEvent(); Получаем идентификатор события.
Gadget=EventGadget(); Узнаём идентификатор активного гаджета.
 
  If Event=#PB_Event_Gadget And Gadget=2; Условие будет выполнено при щелчке по кнопке.
   MessageRequester("Сообщение","Была нажата кнопка"); Выводим на экран сообщение.
  EndIf
 
Until Event = #PB_Event_CloseWindow; Прерываем цикл при закрытии окна
Этот пример без каких-либо модификаций можно скомпилировать под Windows х86, Windows х64, Linux, MacOS X и AmigaOS с помощью компиляторов http://www.purebasic.com/download.php
Размер исполняемого файла получается примерно 20КБ (зависит от платформы, для которой он предназначен) и для его работы не нужны никакие библиотеки кроме системных.

Скрин проги


Во вложении скомпилированая программа для Windows и Linux.
Записан
denka
Гость
« Ответ #10 : Август 02, 2009, 11:17 »

ОФФ: Это печально - регистрироваться на форуме у которого основное направление Qt & C++ и пытаться там пропихнуть какой то Бейсик  Улыбающийся
Записан
Rcus
Гость
« Ответ #11 : Август 02, 2009, 11:19 »

Ну и шуточки у вас, с каких это пор gtk стала системной библиотекой? Если нужен такой кросслпатформенный аналог MFC, то уж проще wx взять.
Записан
f-r-o-s-t
Гость
« Ответ #12 : Август 02, 2009, 11:35 »

 Обеспокоенный Ужас какой ! Может ну его нахер ООП и сидеть клепать кроссплатформенные окошечки =(
Записан
n. tr.
Гость
« Ответ #13 : Август 03, 2009, 10:05 »

У всех так?

А сами-то как думаете? Посмотрите размер qtcore.lib и qtgui.lib.
Если собирать динамически, то придётся пихать эти qtcore4.dll и qtgui4.dll в дистрибутив, что приведёт к такому же итоговому размеру.
Хотя сейчас посмотрел, релизная версия у одной не очень большой программы у меня 5мб (дебаг - 11.3), в зип-архиве порядка меньше 2 мб.

Непонятно только возмущение/удивление. ПОчему такой размер - ясно. Чем это плохо - не ясно. А вот чему возмущаться тем более непонятно.
Хочется писать маленькие программы для win - используйте MFC или там WTL.

Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #14 : Август 03, 2009, 11:53 »

Люди, а пробовал ли кто "вырезать" ненужные классы при статичекой сборке приложений? И какой минимальный размер занимали приложения? И какие классы использовались?

Кидайте сюда инфу Улыбающийся

PS : смотреть тут http://www.forum.crossplatform.ru/index.php?showtopic=981&st=20
пост №38
« Последнее редактирование: Август 03, 2009, 11:57 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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