Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Как видно из заголовка статьи разговор будет о размере исполняемого файла при компилирование в Lazarus.  Это частый вопрос у тех кто только недавно начал программировать в Lazarus. И так начнем.

 

 

Введение

Картинка для привлечения внимания

lazarus  exe size

При первой компиляции в Lazarus проекта, многие удивляются размеру исполняемого файла . Ниже приведено сравнение размеров скомпилированного пустого проекта в разных средах программирования.

 

Среда разработкиРазмер файла по умолчанию (байт)Размер файла с оптимизацией (байт)
Lazarus 15 210 592 1 818 112
Delphi XE7 11 510 970 2 277 376
Delphi 7 368 128 368 128

Как видно из этой таблицы не все так уж и плохо у лазаруса в плане размеров, последние версии Delphi изрядно растолстели, как осенние белки.  Но все же далеко ему и до Delphi 7. В общем есть куда стремится. Если же добавить на форму кучу разных компонент то размер файла будет весьма впечатляющий.

Вот пример размера файла самой среды Lazarus собранной с кучей установленных компонентов. 

Все каких то 235 мегабайт. 235 мегабайт Карл. Файл lazarus.old.exe собран как раз таки с оптимизацией. Разница в размере видна невооружённым взглядом. 

Большой размер исполняемого файла обусловлен тем что компилятор включает много дополнительной отладочной информации, которая помогает отлаживать программу. Но это все требуется зачастую на этапе отладки программы, конечному же пользователя не хочется сидеть и ждать когда через пол часа закачается программа.  Вот для это и нужно эту лишнюю информацию исключать.

И так что для этого  нужно сделать что бы программа созданная в лазарусе  не занимала много места.

Настройка параметров компилирования

Пользователям старой версии лазаруса  необходимо было в настройках проекта выставлять различные галочки для исключения лишней информации из файла. Было это примерно так.

Открывалась форма параметры проекта.  И на вкладках выставлялись нужные галочки.

На вкладке  Компиляция и компоновка снимались галочки.

lazarus project options

На вкладке Отладка снималась галочка "Генерировать отладочную информацию" и ставилась галочка "Вырезать символы из исполнимого файла"

lazarus debug

Данные настройки позволяют уменьшить размер файла.

В новой же версии Lazarus, на данный момент пишу это для версии 1.4.4  все несколько упростилось.

Теперь можно сделать так. Открываем параметры проекта и нажимаем на "Параметры компиляции". Затем нажимаем кнопку рядом с  режимами  сборки.

lazarus option

Появится окно параметров сборки. Тут нажимаем кнопку "Создать режимы отладочной и конечной сборки ". В окне появится еще два режима сборки, Release и Debug, такие же режимы если в последних версиях Delphi XE?.

Режим Release будет создавать маленький исполняемый файл.

После этого на панели инструментов появится кнопка выбора режимов.

lazarus panel

Достаточно выбрать нужный режим. 

Это методы используемые из среды разработки. Теперь про дополнительные методы.

Утилита Strip.exe 

В комплекте с компилятором  Free Pascal имеется замечательная утилита Strip.exe, которая вычищает отладочную информацию из исполняемого файла.

Утилита запускается из командной строки с параметрами 

strip.exe --strip-all project1.exe

Но это не наш метод.

Сделать можно так.

Открываем  меню Сервис - Настроить внешние средства.

В открывшемся окне необходимо добавить новый инструмент. Я сделал так. 

lazarus strip

Теперь можно пользоваться утилитой strip.exe прямо из среды разработки.

Утилита upx.exe.

Так же для уменьшения размеров файла можно использовать различные упаковщики. Они позволяют существенно уменьшить размер программы. А более продвинутые позволяют установить защиту на исполняемый файл или триальный период. Одной из самых распространенных программ для сжатия  файлов является UPX.  Данная утилита одна из самых простых в использовании.  Из командной строки это делается так.

upx.exe --best project1.exe

Но опять же все можно упростить до минимума.

Как и в предыдущем методе  делаем так .

lazarus strip

И можем пользоваться утилитой из среды разработки.

lazarus menu

Она сжимаем файл достаточно хорошо. И не особо уменьшает скорость запуска файла. Пример работы показан на изображение.

lazarus folder

Почти троекратное сжатие файла.

Использование LLCL - Lazarus Light LCL

Недавно  появились компоненты которые позволяют существенно уменьшить размер исполняемого файла. Это компоненты LLCL этакий аналог KOL для Delphi. Это набор файлов в которых переработанных классов free pascal (поправьте если ошибаюсь)  где часть кода переписана на ассемблере, что позволяет уменьшить размер занимаемый исполняемым файлом. LLCL основан на базе Light VCL replacement for Delphi 7 наборе классов для Delphi 7 .

LLCL не требует установки его в Lazarus, достаточно просто в параметрах компиляции проекта сделать на них ссылку.  И  при сборке будут использоватся эти классы, а не стандартные от лазаруса. 

В общем я сделал так . Скачал данный компоненты. Закинул их в папку где у меня лежат компоненты от лазаря.  Затем создал простой проект с формой, на ней разместил несколько компонентов.

lazarus form1

А затем собрал проект. Несколько ниже приведены полные результаты эксперимента. Затем я использовал компоненты LLCL.  Делается это так. Открывается окно параметров проекта, затем выбирается пункт пути и нажимается кнопка "Другие модули".

В появившемся окне добавляем в верхнее окно путь к папке с файлами LLCL. 

lazarus -fu

Затем нажал Ок и закрыл параметры проекта. И  снова собрал проект снова. Исполняемый файл стал весьма меленьким.  Решил еще оптимизировать проект. Удалил стандартную иконку из проекта. И  пересобрал проект.  Программа стала еще меньше. И  под конец сжал её upx-ом. Результаты видно тут. Это очень замечательно. Можно писать очень маленькие вирусы  утилиты на лазарусе.  

P.S. Дальнейшие испытания показали что при использование LLCL придется применять крайне малый набор графических компонент. Это печально.

lazarus all size

Вот собственно и все что можно на данный момент скачать о уменьшение размера приложения в Lazarus,  если появится какой либо еще новый способ то я его обязательно опишу.

Предыдущая статья  -  Установка компонентов в Lazarus     Следующая статья - Lazarus - работа с базами данных

 
 

Комментарии   

-1 #2 Sasha 22.04.2016 08:44
Цитирую Николай:
KOL использует просто другие вызовы методов класса. Поэтому, там почти нет RTTI. Т.е. пустые виртуальные и динамические таблицы класса - только по минимуму.

Еще. На кой черт тут капча? У Вас такой огромный контингент читающих? :-) Сюда и не полезут говнопостить - нет никого просто.

В том то и дело что если отлючить капчу то сюда начинают постить куча ботов, потом замучаешься вычищать коменты.
Цитировать
0 #1 Николай 07.04.2016 17:10
KOL использует просто другие вызовы методов класса. Поэтому, там почти нет RTTI. Т.е. пустые виртуальные и динамические таблицы класса - только по минимуму.

Еще. На кой черт тут капча? У Вас такой огромный контингент читающих? :-) Сюда и не полезут говнопостить - нет никого просто.
Цитировать

Добавить комментарий


Защитный код
Обновить