Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: Nexor от Июнь 29, 2004, 11:29



Название: Уменьшение размера программ в Mingw
Отправлено: Nexor от Июнь 29, 2004, 11:29
Привет !
А каким образом можно отключить runtime в gcc (mingw) под win32 ?
Я пробовал задавать линкеру параметры -nostartfiles  -nodefaultlibs  -nostdlib. Программа компилируется с сообщением
ld: warning: cannot find entry symbol _mainCRTStartup;
Параметр -entry WinMain здесь не помогает.
Непонятно, как задать свою точку входа.
В VC++ это делается так: cl test.cpp user32.lib /link /entry:WinMain

Текст программы :
(При отключенном runtime - прога выдает ошибку при запуске)
#include <windows.h>

int STDCALL
WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
{
        MessageBox (NULL, "Test message", "Test", MB_OK);
        return 0;
}


Название: Уменьшение размера программ в Mingw
Отправлено: yurror от Март 02, 2007, 04:20
Nexor, тебе вирусы писать чтоли?


Название: Re: Уменьшение размера программ в Mingw
Отправлено: trupca от Июль 28, 2008, 19:41
так что, yurror, ждать от вас ответа? а то вы вроде знаете как это сделать. это с вашего смелого завления.

ну а на счёт вашего вопроса к Nexor'у, то думаю что ему, как и мне, неприятно нести лишних 400кб runtime'а, который едвали нужен при использовании winapi.

и так, с чего я сделал up этой темы - интересуюсь сабжем, точнее почему-же один и тот же код под g++(linux) и mingw(windows) имеет разницу в 400 кубов? спасибо за внимание.

ide code::blocks, компилятор из штатной поставки ide (mingw).


Название: Re: Уменьшение размера программ в Mingw
Отправлено: Tonal от Июль 29, 2008, 10:24
Опция линкера -e.
Хотя с параметрами там может быть не так просто - стартовая функция вызывается без параметров - она их потом добывает. :)

Ну а насчёт размера - 6к для приведённого примера.
g++ (GCC) 3.4.5 (mingw-vista special r3)
>g++ -s -O2 -o "mini" "mini.cpp"

Правда для 4.3.0 получается 50к, но на то она и альфа.
Зато если компилировать в чистый С то получается 5к на той же 4.3.0.


Название: Re: Уменьшение размера программ в Mingw
Отправлено: Red Devil от Июль 29, 2008, 10:27
Дык, у тебя точки входа нет. Погугли статье на русском по этому поводу есть.


Название: Re: Уменьшение размера программ в Mingw
Отправлено: trupca от Июль 29, 2008, 13:23
Tonal, стрип и оптимизация помогли кубов так 200 срезать, а там, увы, ещё столько же осталось. но вот с "-e" так и не прокатило:
Цитировать
warning: cannot find entry symbol -c; defaulting to 00401000
и потом ругань на множественные определния ep. (скороей всего высказался неверно, так что привожу сами ошибки, чтоб потом небыло несостыковок)
Цитировать
multiple definition of `_mainCRTStartup'
multiple definition of `_WinMainCRTStartup'
multiple definition of `__onexit'
etc
значит гуглить на тему ep+mingw?


Название: Re: Уменьшение размера программ в Mingw
Отправлено: Tonal от Июль 30, 2008, 07:48
2 trupcaТы бы командную строку привёл. А то не понятно как ты это получил...
Ну и исходники рантайма можно свободно скачать и пересобрать под себя отрезав всё "лишнее". :-)


Название: Re: Уменьшение размера программ в Mingw
Отправлено: trupca от Август 02, 2008, 18:43
Цитировать
Ты бы командную строку привёл
под виндами командная строка канеш креатив, но в общем такая картина: стандартные опции компиляции плюс -s, -O2 -Os -e.


Название: Re: Уменьшение размера программ в Mingw
Отправлено: lit-uriy от Август 02, 2008, 21:51
Цитировать
-O2 -Os
это ересь, взаимоисключающие ключи, работать будет только последний из указаных
-O2 - уровень оптимизиции 2 (в Qt/мингве стоит поумолчанию)
-Os - оптимизация только по размеру


Название: Re: Уменьшение размера программ в Mingw
Отправлено: trupca от Август 02, 2008, 22:05
lit-uriy
в таком случае - -s, -Os -e. кстати говоря, а -s и -Os не одно и тоже? или, как я понял, одна отвечает только за стрип, а другая только за оптимизацию?


Название: Re: Уменьшение размера программ в Mingw
Отправлено: lit-uriy от Август 02, 2008, 22:20
точно не одно и тоже, те что с большой "О" начинаются отвечают за оптимизацию, а про ключ -s непомню.


Название: Re: Уменьшение размера программ в Mingw
Отправлено: lit-uriy от Август 02, 2008, 22:38
руководства можно взять тут (http://gcc.gnu.org/onlinedocs), доступны и pdf'ники


Название: Re: Уменьшение размера программ в Mingw
Отправлено: trupca от Август 03, 2008, 18:31
lit-uriy
начинали с гугла, закончили rtfm. )) thx!


Название: Re: Уменьшение размера программ в Mingw
Отправлено: Tonal от Август 04, 2008, 07:17
Про значения ключей, всяко RTFM.
Собственно, скорее всего, ты забыл указать чтобы не линковались стандартные библиотеки.

Функция входа в mingw параметров не принимает - см mingw-runtime/crt1.c:__mingw_CRTStartup

Если подставляешь свою точку входа, нужно руками проводить инициализацию rtl-я или совсем его не использовать - это работа с файлами, плавающая точка, исключения, malloc/free, new/delete, потоки и ещё по мелочи. :)