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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Уменьшение размера программ в Mingw  (Прочитано 20135 раз)
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;
}
Записан
yurror
Гость
« Ответ #1 : Март 02, 2007, 04:20 »

Nexor, тебе вирусы писать чтоли?
Записан
trupca
Гость
« Ответ #2 : Июль 28, 2008, 19:41 »

так что, yurror, ждать от вас ответа? а то вы вроде знаете как это сделать. это с вашего смелого завления.

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

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

ide code::blocks, компилятор из штатной поставки ide (mingw).
Записан
Tonal
Гость
« Ответ #3 : Июль 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.
Записан
Red Devil
Гость
« Ответ #4 : Июль 29, 2008, 10:27 »

Дык, у тебя точки входа нет. Погугли статье на русском по этому поводу есть.
Записан
trupca
Гость
« Ответ #5 : Июль 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?
« Последнее редактирование: Июль 29, 2008, 13:26 от trupca » Записан
Tonal
Гость
« Ответ #6 : Июль 30, 2008, 07:48 »

2 trupcaТы бы командную строку привёл. А то не понятно как ты это получил...
Ну и исходники рантайма можно свободно скачать и пересобрать под себя отрезав всё "лишнее". :-)
Записан
trupca
Гость
« Ответ #7 : Август 02, 2008, 18:43 »

Цитировать
Ты бы командную строку привёл
под виндами командная строка канеш креатив, но в общем такая картина: стандартные опции компиляции плюс -s, -O2 -Os -e.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Август 02, 2008, 21:51 »

Цитировать
-O2 -Os
это ересь, взаимоисключающие ключи, работать будет только последний из указаных
-O2 - уровень оптимизиции 2 (в Qt/мингве стоит поумолчанию)
-Os - оптимизация только по размеру
Записан

Юра.
trupca
Гость
« Ответ #9 : Август 02, 2008, 22:05 »

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

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Август 02, 2008, 22:20 »

точно не одно и тоже, те что с большой "О" начинаются отвечают за оптимизацию, а про ключ -s непомню.
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #11 : Август 02, 2008, 22:38 »

руководства можно взять тут, доступны и pdf'ники
Записан

Юра.
trupca
Гость
« Ответ #12 : Август 03, 2008, 18:31 »

lit-uriy
начинали с гугла, закончили rtfm. )) thx!
Записан
Tonal
Гость
« Ответ #13 : Август 04, 2008, 07:17 »

Про значения ключей, всяко RTFM.
Собственно, скорее всего, ты забыл указать чтобы не линковались стандартные библиотеки.

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

Если подставляешь свою точку входа, нужно руками проводить инициализацию rtl-я или совсем его не использовать - это работа с файлами, плавающая точка, исключения, malloc/free, new/delete, потоки и ещё по мелочи. Улыбающийся
« Последнее редактирование: Август 04, 2008, 07:20 от Tonal » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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