MasterGH Опубликовано 9 февраля, 2011 Поделиться Опубликовано 9 февраля, 2011 Lazarus - свободно распространяемая IDE для компилятора Free Pascal Compiler, среды для разработки кросс-платформенных приложений на языке Free Pascal. Содержит набор визуальных компонентов LCL (Lazarus Component Library). В настоящее время практически полностью поддерживает виджеты GTK1 и Win32 . В разработке находятся виджеты Carbon, WinCE и WinAPI. Начиная с версии 0.9.26 поддерживает виджеты GTK2 и Qt Реализован основной набор элементов управления Поддерживает преобразование проектов Delphi Имеет собственный формат управления пакетами Поддерживаемые ОС: GNU/Linux, Microsoft Windows, Mac OS X, FreeBSD, WinCEКак уменьшить размер EXE файла в LazarusЛюбой, даже небольшой проект в Lazarus, при компиляции создает EXE файл большого размера. Это связано с тем, что компилятор добавляет большое количество информации для отладчика. Когда это информация становится ненужной (например, после окончательной отладки программы) ее можно удалить. Рассмотрим этот процесс на примере простой консольной программы, выводящей строчку "Hello, World!". Создаем новый проект: Файл ? Создать ? Project ? Console application. Добавляем строчку Write('Hello, World!'); после строк "{ add your program here }" в подпрограмме TMyApplication.DoRun. Теперь запускаем программу. Все, что она делает - это выводит строку текста в консольном окне и при этом занимает 1 154 845 байт (в случае приложения под Виндоуз размер может быть выше 11 МБ). Начнем уменьшать размер. Первое, уберем информацию для отладчика из исполняемого файла: strip --strip-all project1.exe (здесь project1.exe - имя вашего бинарного файла). Новый файл project1.exe имеет размер 141 312 байт, т.е. в 8 раз меньше. Но на этом мы не остановимся. Проведем еще один шаг уменьшения размера исполняемого файла с помощью бинарного упаковщика UPX. Команда для полного сжатия следующая: upx.exe --best project1.exe (упаковщик UPX должен лежать в той же папке, что и сама программа или же можно прописать путь в PATH до папки, где проинсталлирован упаковщик). В результате получим размер 54 272 байт, т.е. в 21 раз меньше первоначального размера. Отметим, что порядок выполнения команд важен. Если запустить упаковщик, а потом команду strip, то результат будет значительно хуже (416 541 байт). Для удобства вы можете создать пакетный командный файл compile.bat со следующим содержанием (подставив вместо project1.exe имя вашего исполняемого файла): strip --strip-all project1.exeupx.exe --best project1.exeТеперь, для того, чтобы уменьшить размер исполняемого файла достаточно просто запустить файл compile.bat.Автор статьи: Ильдар Насибуллаев. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 9 февраля, 2011 Поделиться Опубликовано 9 февраля, 2011 Не использовал Лазарус ни разу.. Интересно, а если на чистом WinAPI писать в нем, насколько велик будет получаемый экзешник? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 10 февраля, 2011 Автор Поделиться Опубликовано 10 февраля, 2011 Создание формы на WinAPI:Lazarus IDE - v0.9.28.2 BetaFree Pascal - v2.2.4{$APPTYPE GUI}Program Api;{$MODE DELPHI}useswindows, messages;varwindow:TWndClassEx;Mwindow: HWND;Mmsg: MSG;function WindowProc (wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL;begin case msg of WM_Destroy: begin PostQuitMessage (0); Result := 0; Exit; end; else Result := DefWindowProc(wnd,msg,wparam,lparam); end;end;begin window.cbSize := sizeof (window); window.style := CS_HREDRAW or CS_VREDRAW; window.lpfnWndProc := @WindowProc; window.cbClsExtra := 0; window.cbWndExtra := 0; window.hInstance := HInstance; window.hIcon := LoadIcon (0,IDI_APPLICATION); window.hCursor := LoadCursor (0,IDC_ARROW); window.hbrBackground:=Color_BtnFace+12; window.lpszMenuName := nil; window.lpszClassName := 'Main_Window'; RegisterClassEx (window); Mwindow := CreateWindowEx(0,'Main_Window','First_WinAPI_Programm', WS_OVERLAPPEDWINDOW,100,100,300,300,0,0,Hinstance,nil); SHOWWINDOW (Mwindow,SW_Show); while GetMessage (Mmsg,0,0,0) do begin TranslateMessage (Mmsg); DispatchMessage (Mmsg); end;end.Этапы работы "напильником":1) 63 КБ не в сжатом виде (23 КБ - упакован в архив .rar)2) Удалив отладочную инфорамцию батником:cd lazarusD:\SOFT\lazarus\fpc\2.2.4\bin\i386-win32\strip.exe --strip-all project1.exeПолучаю 38 КБ(17 КБ - упакован в архив .rar)3) Открываем "Проект -- Параметры компилятора -- Код"Ставим галку напротив "Умное связывание (-CX)"Переходим на вкладку "Связывание" и убираем галку напротив "Выдать номера строк в ошибках времени исполнения (-gl)"Тут же ставим галку напротив "Вырезать символы из бинарника (-Xs)" - эту же самую функцию выполняет утилита strip.Тут же савим галку на "Умное связывание (-XX)"Жмем "Ок" и компилируем проект по новой.Получаю 28 кб (13 КБ - упакован в архив .rar)Выполнял по статье------Но последние обновления (я их ещё не установил):2009-10-25 lazarus-0.9.28.2-fpc-2.2.4-win32.exe (64.6 MB) 13.11.2010 Вышел релиз Free Pascal v2.4.2Я думаю, даже если бы я установил обновления, то размер бы вряд ли бы уменьшился.Пока вывод:Получаю 28 кб (12 КБ - упакован в архив .rar)Я не использовал пакеры, так что кому надо тот сам сделает.Файл для исследования (секций и дизассемблерного кода) в аттаче: 3) project1.rar Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 февраля, 2011 Поделиться Опубликовано 11 февраля, 2011 Если учесть, что в дельфях винапишный файл получается размером ~15 килобайт без сжатия - я таки предпочитаю дельфи. Хотя, в любом случае, я уже давно пишу на C++ и возвращаться к паскалю меня пока не тянет ) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 11 февраля, 2011 Автор Поделиться Опубликовано 11 февраля, 2011 Я с тобой согласен. Я написал эту тему, т.к. мне было самому интересно и на этих инструментах была написана CE 6.0. Соответственно модификации делать можно этими инструментами. Кстати автономные трейнеры прикрученные к CE6.0 будут весит около 15 мб - писал Дарк байт. Но если "обрезать" выше описанными способами, то думаю чуть больше 2 метров. В CE 5.6 версиях трейнер весил ~800 кб с картинкой. ИМХО разница большая. Но LUA-скрипты в таблицах CE - это сверх компактный трейнер, который будет работать если установлена CE....Также стоит учитывать, что эти инструменты гибче Дельфи, они свободные и их можно продавать и другие могут продавать, то что продают первые - такая вот лицензия. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения