Когда я впервые взглянул на размер исполняемого файла, скомпилированного с помощью Lazarus, то был немало удивлён его исполинским размером. Это было давно, однако в текущей версии проблема только усугубилась. Проект из пары не слишком сложных форм с сотней-другой строк кода приводит к генерации исполняемого файла, размер которого превышает 6 Мб.
В общем-то, в процессе работы над проектом это не слишком напрягает, но когда надо продемонстрировать результат заказчику, могут возникнуть осложнения. Если это огромная система с десятками форм и мегабайтами кода, то несколько завышенный размер приложения только придаст ему значительности. Иначе, сами понимаете, в Вашей компетентности могут усомниться.
Бороться с этим совсем не сложно. В комплекте с компилятором имеется набор разных замечательных утилит. Среди них есть две, специально предназначенные для нашего случая. Это strip и upx. Первая из них удаляет из файла программы всю лишнюю информацию, вторая — подвергает файл компрессии. Для простоты применения скопируем обе утилиты в каталог с нашим раздутым exe-файлом.
Как уменьшить размер программы в Lazarus
Этого можно не делать, если путь к исполняемым файлам компилятора Вы поместили в переменную окружения PATH (что я очень рекомендую проделать). Теперь запустим их в DOS-окне последовательно, указав имя файла в качестве параметра:
strip myhuge.exe
upx myhuge.exe
Совсем уж ленивые могут проделать тоже самое в проводнике Windows с помощью drag-and-drop’а. Вообще говоря, у обеих утилит есть различные параметры запуска, но и по-умолчанию они справляются с задачей на отлично, уменьшая размер примерно в 3 раза каждая. Мой тестовый проект «похудел» с 6 Мб до 470 кб. Сам Lazarus можно сократить таким путём с примерно 20 Мб до менее чем двух.
Только не забывайте, что в Windows программа , обработанная upx, будет загружена в память дважды: в упакованном состоянии и в распакованном, рабочем состоянии.
Что делать, если Вы нашли ошибку в FCL?
Странный вопрос. Конечно-же исправить! Но не торопитесь праздновать. Чтобы Ваши исправления вступили в силу, придётся перекомпилировать FCL. Звучит пугающе, но на самом деле это просто. Во-первых, нет смысла перекомпилировать всю FCL.
Во-вторых, Вам надо будет всего лишь выполнить 2 простые команды. Сначала запустите сеанс MS DOS (или консоль Linux) и перейдите в каталог той части FCL, где вы вносили изменения (например lazarusfpcsrcfcldb). Теперь просто наберите в командной строке
make
и нажмите ввод. Это не сработает, если путь к исполняемым файлам компилятора Free Pascal не находится в переменной PATH. Заметьте также, что если у Вас есть другая утилита make и путь к ней в переменной PATH указан раньше, то проблем не миновать. Если указанные симптомы имеют место и ничего нельзя сделать, то в крайнем случае можно запустить make с указанием полного пути:
C:lazarusppbini386-win32make
Что же произойдёт? В каждом каталоге исходников FCL присутствует специальный файл с подробным описанием того, как эти исходники надо компилировать. Когда Вы запускаете утилиту make из такого каталога, она читает этот файл и производит необходимые вызовы компилятора. Результаты его работы будут хорошо видны на экране в виде быстро бегущих строчек результатов компиляции. Если Вы не получили сообщение об ошибке, то снова запустите make, но уже с параметром:
make install
Эта команда перенесёт скомпилированные модули в то место, где по её информации их ожидает найти FPC. Обычно это место — каталог «C:ppunitsi386-win32fcl», однако в нашем случае корневой каталог компилятора не «C:pp», а «C:lazaruspp». В Linux такой проблемы, скорее всего, не возникнет. В Windows поступим предельно бесхитростно: просто скопируем файлы из «C:ppunitsi386-win32fcl» в «C:lazarusppunitsi386-win32fcl».
Теперь хорошо-бы перекомпилировать и сам Lazarus. Если внесённые Вами исправления привели к изменению интерфейса каких-либо классов FCL, то это придётся сделать обязательно.
Источник: www.freepascal.ru
Как уменьшить размер программы в Lazarus
Среда разработки Lazarus очень похожа на Делфи. Однако все мои знакомые программисты, которым по тем или иным причинам приходилось “пересаживаться” с Делфи на Lazarus, при компиляции первой же программы буквально охреневали от одной особенности Lazarus. А именно — от очень большого размера исполняемого файла (EXE-файла) откомпилированной программы.
Ну например, если графическое приложение, которое ничего не делает (пустое окно), после компиляции в Делфи занимает примерно 385 килобайт, то такое же приложение, созданное с помощью Lazarus, “весит” около 15 МЕГАбайт. То есть в 40 раз больше!
На самом деле всё не так страшно. Просто Lazarus по умолчанию “пихает” в ЕХЕ-файл отладочную информацию, которая и занимает так много места.
Избавиться от этого достаточно просто — надо в настройках проекта запретить включать в исполняемый файл отладочную информацию. Для этого выбираем меню:
ПРОЕКТ — ПАРАМЕТРЫ ПРОЕКТА (или нажимаем SHIFT+CTRL+F11)
а в открывшемся окне в группе ПАРАМЕТРЫ КОМПИЛЯТОРА выбираем ОТЛАДКА. Здесь снимаем галочку у надписи “Генерировать отладочную информацию…” и нажимаем кнопку ОК (см. рис.).
Ну вот и всё. Осталось только перекомпилировать вашу программу, и вы увидите, что размер исполняемого файла стал намного меньше. Правда, он всё-равно будет немного больше, чем такая же программа, созданная в Делфи. Но это уже плата за бесплатность Lazarus.
Уменьшение размера исполняемого файла в Lazarus
Cоздаваемые в Lazarus исполняемые файлы имеют довольно большой размер. Причин несколько. Во-первых, в exe-файле сохраняется вся отладочная информация. Во вторых — создаваемый exe-файл оптимизирован под скорость выполнения, а не под размер.
Чтобы уменьшить размер исполняемого файла необходимо в свойствах проекта (Проект — Параметры проекта) включить 4 ключа компиляции:
1) Вкладка Генерация кода: установить флажок «Умная компоновка» (-СХ);
2) Вкладка Компоновка: установить флажок «Умная компоновка» (-ХХ);
3) Вкладка Компоновка: установить флажок «Использовать внешний файл отладочных символов GDB»(-Xg);
4) Вкладка Компоновка: установить флажок «Вырезать символы из исполняемого файла»(-Xs).
Эта настройка позволяет сократить размер исполняемого файла в несколько раз. (Пустой проект с 12 МБ сокращается до 1 МБ).
Однако, можно еще сократить размер, если воспользоваться утилитами strip.exe и upx.exe. Первая вырезает из файла отладочную информацию, вторая сжимает запускаемый файл. Удобно создать bat-файл
compress.bat
strip.exe —strip-all %1 upx.exe —best %1
и запускать сжатие одной командой:
Утилиты прикреплены ниже.
Утилиты компрессии exe-файла Lazarus | 401.35 кб |
Источник: grafika.me