Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Mindtraveller от Март 11, 2007, 05:00



Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 11, 2007, 05:00
Пишу утилиту с использованием QT. Есть необходимость сделать файл как можно меньше. UPX - само собой, но здесь хотелось бы обсудить возможность уменьшения исходного файла.

Что для этого было сделано. Собран QT, 4.2.2 (configure + mingw32-make), статически, release. Ключи конфигуратора выключали почти всё, кроме stl (без него не проходит сборка qtGUI).
При этом libQtCore = 2 Mb, libQtGui = 9 Mb.

Отсюда, в QDevelop при помощи того же MinGW собиралось тестовое приложение, где есть только главное окно. Размер приложения получился 5 Mb.

Вопрос к профессионалам: в моём случае, как можно уменьшить размер EXE-файла (без UPX), если можно, объясните по пунктам.
Схожая тема на форуме была мною изучена, к сожалению не помогло (возможно, что-то сделал не так).


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mr. Пронька от Март 11, 2007, 10:22
Как предполагается распространять приложение? Возможны ли апдейты или только скачивание новой версии?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Alex03 от Март 11, 2007, 10:37
exception при сборке qt отключали?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 11, 2007, 11:06
Mr. Пронька: только скачивание новой версии
Alex03: исключения выключены, rtti тоже


Название: Re: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 11, 2007, 13:47
Цитата: "Mindtraveller"

Вопрос к профессионалам: в моём случае, как можно уменьшить размер EXE-файла (без UPX), если можно, объясните по пунктам.


Поробуй прогнать утилитой strip с параметром -s

Цитировать
-s --strip-all                   Remove all symbol and relocation information


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Вудруф от Март 11, 2007, 13:52
strip --strip-unneeded

добавлено спустя 1 минуту:

 Ещё можно при конфигурации заюзать -no-qt3support


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 11, 2007, 17:04
1) qt3support был отключен изначально
2) strip -s не помог: размер файла не уменьшился

Есть ещё какие-то пути?
Может быть, полученный размер библиотек (см. выше) слишком большой?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: evilguard от Март 11, 2007, 17:39
Mindtraveller
Че-то размер великоват, у меня QTCore 1.5 Mb, QTGui 5Mb, причем при сборке ничего не отключал, есть все. Компилил MSVC, QT 4.2.2


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 11, 2007, 17:48
evilguard, а при статической линковке какой получается размер ехе-шника где просто одно окно без ничего?

Причём ты возможн привёл размер dll-ок, а я привёл размер либов.
Длл-ки могут тянуть за собой другие длл-ки, отсюда, возможно, и разница в размере.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: evilguard от Март 11, 2007, 18:15
Хорошо, размер либов - QTGui4.lib - 3.59Mb, QTCore4.lib - 1.1Mb.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 11, 2007, 18:33
Классно. Ровно в 2 раза меньше.
Увы, не знаю как добиться при сборке minGW.
Может кому-нибудь удавалось настолько уменьшить размер либов?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: crossly от Март 11, 2007, 18:33
Цитата: "evilguard"
Хорошо, размер либов - QTGui4.lib - 3.59Mb, QTCore4.lib - 1.1Mb.

при сборке с помощью msvc размер всегда меньше....


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: evilguard от Март 11, 2007, 19:27
Цитата: "crossly"
Цитата: "evilguard"
Хорошо, размер либов - QTGui4.lib - 3.59Mb, QTCore4.lib - 1.1Mb.

при сборке с помощью msvc размер всегда меньше....

Ну я собирал, не отключая ничего.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 11, 2007, 20:02
У меня MinGW 3.4.5 (Candidate). Собрал qt-win-opensource-src-4.2.3 со следующим конфигом:

-debug-and-release
-no-stl
-no-rtti
-no-qt3support
-no-dsp
-no-vcproj
-no-accessibility

Размер либы libQtCore4.a - 1.7 Мб, libQtGui4.a - 6.2 Мб


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 11, 2007, 21:24
А размер тестовой программы (как в первом постинге) какой получается?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 12, 2007, 00:33
Цитата: "Mindtraveller"
А размер тестовой программы (как в первом постинге) какой получается?


Я сделал вот такой тестовый пример:

Код:
#include <QApplication>
#include <QWidget>

int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWidget w;
w.show();
return app.exec();
}


Релиз получился 23 Кб, дебаг - 1,1 Мб. Если дебаг версию прогнать strip -s, то размер получаеться 24 Кб.

ЗЫ: Размер у меня будет отличен от твоего из-за того что у тебя Qt собрана статически.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 12, 2007, 01:31
Так я и спрашиваю, при _статической_ линковке, у тебя какой получается размер в релизе?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 12, 2007, 04:18
Выражусь по другому.... у меня нет статической сборки Qt под MinGW


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Вудруф от Март 12, 2007, 08:13
Цитировать
pastor

Что логично, т.к. strip вырезает все дебажные символы, и не только... Так у меня релиз с 600 кб до 400 кб сокращается...


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 12, 2007, 14:12
Цитата: "Вудруф"
Цитировать
pastor

Что логично, т.к. strip вырезает все дебажные символы, и не только... Так у меня релиз с 600 кб до 400 кб сокращается...


У меня релиз не уменьшаеться в размере после strip. ИМХО и не должен, т.к. релиз не содержит дебажной информации. Уменьшаеться в размере только дебаг.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Вудруф от Март 12, 2007, 16:10
А хбз почему, но вот уменьшается :)


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 12, 2007, 17:07
Цитата: "Вудруф"
А хбз почему, но вот уменьшается :)


У тебя strip лучше ;)


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Mindtraveller от Март 12, 2007, 21:44
pastor, тогда плиз не засоряйте тему. Здесь речь шла именно о статической линковке. С длл проблем не было пока.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Dendy от Март 13, 2007, 16:41
Попробуй способ отсюда:

http://prog.org.ru/forum/lhtopic_3974_0_0_asc_%D5%CD%C5%CE%D8%DB%C5%CE%C9%C5+%D3%D4%C1%D4%C9%DE%C5%D3%CB%CF%CA.html

Если что неясно - спрашивай.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: SLiDER от Март 13, 2007, 22:11
Цитата: "Dendy"
Попробуй способ отсюда:

http://prog.org.ru/forum/lhtopic_3974_0_0_asc_%D5%CD%C5%CE%D8%DB%C5%CE%C9%C5+%D3%D4%C1%D4%C9%DE%C5%D3%CB%CF%CA.html

Если что неясно - спрашивай.


Мне конечно все равно, но со ссылкой явно какие-то проблемы. :?


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Вудруф от Март 14, 2007, 08:48
Да, я прогнал. У release-сборки strip действительно размер не уменьшает.
Однако для обычной программы
Код:

#include <iostream>

int main()
{
std::cout << "Hello, world!\n";
}

Собираемой вызовом
Код:
g++ 123.cpp -o 123.exe -O3

strip уменьшает размер с 478624 байт до 267264 байт.

Вопрос: что ещё надо указывать в параметрах компилятора, чтобы "ничего лишнего" не добавлялось (вроде же для дебага требуется дополнительно -g...).


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: zabivator от Март 14, 2007, 09:24
Dendy способ настройки config.h перед сборкой кьюта. Он позволяет вырезать из сборк ненужные в программе виджеты.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: pastor от Март 14, 2007, 15:30
Цитата: "Вудруф"

Вопрос: что ещё надо указывать в параметрах компилятора, чтобы "ничего лишнего" не добавлялось (вроде же для дебага требуется дополнительно -g...).


g++ 123.cpp -o 123.exe -O3 -s


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: Dendy от Март 14, 2007, 19:42
Вот правильная ссылка:

http://prog.org.ru/forum/topic_3974_0.html


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: _govorilka от Март 15, 2007, 04:44
Mindtraveller, попробуй вообще не пользоваться либами!!! Подключай все *.h и *.cpp руками. Знаю, что это геморой, но нужно это сделать все один раз. Также можешь сделать полностью свою либу (только те классы, которые действительно нужны нужны!!!). Если все грамотно сделаешь, то сможешь выграть 25-30%, а может и больше. И еще - если есть возможность, возьми другой компилятор (MinGW - говно!!!). Из всех, что есть мне больше нравится IC++ от Intel, но это отдельная тема.


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: SLiDER от Март 15, 2007, 22:46
Цитата: "_govorilka"
И еще - если есть возможность, возьми другой компилятор (MinGW - говно!!!).


Цитата: "Михаил Афанасьевич Булгаков"
– ... И – боже вас сохрани – не читайте до обеда советских газет.
 – Гм… Да ведь других нет.


 :D

Цитата: "_govorilka"
Из всех, что есть мне больше нравится IC++ от Intel, но это отдельная тема.

А компилятор действительно замечательный (хоть интел к его созданию ни какого отношения не имеет), но вот с версии 9, стал безбожно глючным и своенравным.  :(


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: _govorilka от Март 16, 2007, 08:19
Цитировать

А компилятор действительно замечательный (хоть интел к его созданию ни какого отношения не имеет), но вот с версии 9, стал безбожно глючным и своенравным.  :(


Кстати, про компиляторы, может новую тему создать...


Название: [4.2.2, static, MinGW] Снова об уменьшении размера EXE
Отправлено: evilguard от Март 16, 2007, 23:16
_govorilka
Да! Я только за!