Перейти к содержанию

Трейнеры на Lazarus


Рекомендуемые сообщения

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.exe
upx.exe --best project1.exe

Теперь, для того, чтобы уменьшить размер исполняемого файла достаточно просто запустить файл compile.bat.

Автор статьи: Ильдар Насибуллаев.

Ссылка на комментарий
Поделиться на другие сайты

Создание формы на WinAPI:

post-3-1297348070,13_thumb.png

Lazarus IDE - v0.9.28.2 Beta

Free Pascal - v2.2.4


{$APPTYPE GUI}
Program Api;
{$MODE DELPHI}
uses
windows, messages;
var
window: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 lazarus
D:\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

Ссылка на комментарий
Поделиться на другие сайты

Если учесть, что в дельфях винапишный файл получается размером ~15 килобайт без сжатия - я таки предпочитаю дельфи. Хотя, в любом случае, я уже давно пишу на C++ и возвращаться к паскалю меня пока не тянет )

Ссылка на комментарий
Поделиться на другие сайты

Я с тобой согласен. Я написал эту тему, т.к. мне было самому интересно и на этих инструментах была написана CE 6.0. Соответственно модификации делать можно этими инструментами. Кстати автономные трейнеры прикрученные к CE6.0 будут весит около 15 мб - писал Дарк байт. Но если "обрезать" выше описанными способами, то думаю чуть больше 2 метров. В CE 5.6 версиях трейнер весил ~800 кб с картинкой. ИМХО разница большая. Но LUA-скрипты в таблицах CE - это сверх компактный трейнер, который будет работать если установлена CE.

...Также стоит учитывать, что эти инструменты гибче Дельфи, они свободные и их можно продавать и другие могут продавать, то что продают первые - такая вот лицензия.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.