Публикации Lazarus

Маленькие хитрости при работе в Lazarus

02.05.2005
Сергей Смирнов

Уменьшение размера exe-файла

Когда я впервые взглянул на размер исполняемого файла, скомпилированного с помощью Lazarus, то был немало удивлён его исполинским размером. Это было давно, однако в текущей версии проблема только усугубилась. Проект из пары не слишком сложных форм с сотней-другой строк кода приводит к генерации исполняемого файла, размер которого превышает 6 Мб.

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

Бороться с этим совсем не сложно. В комплекте с компилятором имеется набор разных замечательных утилит. Среди них есть две, специально предназначенные для нашего случая. Это strip и upx. Первая из них удаляет из файла программы всю лишнюю информацию, вторая - подвергает файл компрессии. Для простоты применения скопируем обе утилиты в каталог с нашим раздутым exe-файлом. Этого можно не делать, если путь к исполняемым файлам компилятора Вы поместили в переменную окружения 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, где вы вносили изменения (например \lazarus\fpcsrc\fcl\db). Теперь просто наберите в командной строке

  make

и нажмите ввод. Это не сработает, если путь к исполняемым файлам компилятора Free Pascal не находится в переменной PATH. Заметьте также, что если у Вас есть другая утилита make и путь к ней в переменной PATH указан раньше, то проблем не миновать. Если указанные симптомы имеют место и ничего нельзя сделать, то в крайнем случае можно запустить make с указанием полного пути:

  C:\lazarus\pp\bin\i386-win32\make

Что же произойдёт? В каждом каталоге исходников FCL присутствует специальный файл с подробным описанием того, как эти исходники надо компилировать. Когда Вы запускаете утилиту make из такого каталога, она читает этот файл и производит необходимые вызовы компилятора. Результаты его работы будут хорошо видны на экране в виде быстро бегущих строчек результатов компиляции. Если Вы не получили сообщение об ошибке, то снова запустите make, но уже с параметром:

  make install

Эта команда перенесёт скомпилированные модули в то место, где по её информации их ожидает найти FPC. Обычно это место - каталог "C:\pp\units\i386-win32\fcl", однако в нашем случае корневой каталог компилятора не "C:\pp\", а "C:\lazarus\pp". В Linux такой проблемы, скорее всего, не возникнет. В Windows поступим предельно бесхитростно: просто скопируем файлы из "C:\pp\units\i386-win32\fcl" в "C:\lazarus\pp\units\i386-win32\fcl".

Теперь хорошо-бы перекомпилировать и сам Lazarus. Если внесённые Вами исправления привели к изменению интерфейса каких-либо классов FCL, то это придётся сделать обязательно.

Актуальные версии
FPC3.2.2release
Lazarus3.2release
MSE5.10.0release
fpGUI1.4.1release
links