Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Свежие комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 11 ноября 2009 в 01:37.
Категории: Delphi IDE, Без категории.


Итак, выдалась всё-таки свободная минутка и я решил немного углубить свои знания в работе с Lazarus. Если учесть то обстоятельство, что в скором времени мне как на домашнем ноутбуке, так и на рабочей машинке появится кто-то из семейства Linux (скорее всего одна из версий Ubuntu), то лишними знания по настройке и работе с Lazarus точно не будут.

lazarus_logo_small

Как я уже упоминал в одном из постов, Lazarus это IDE для Free Pascal и использоваться Лазарь может где угодно - хоть на Win32-системах, хоть в Linux. Отличительная черта - кроссплатформенность. Можно без особых заморочек компилировать проекты под любую ось (чего не скажешь о Delphi). Кроме того Lazarus на сегодняшний день является единственным живым проектом под Linux для работы с Pascal и проектами Delphi. Был ещё в свое время Kylix, но проект вроде бы успешно загнулся.
Поэтому, если Вы решите (или вас заставят) перейти с Windows на Linux и Вы захотите продолжать свои разработки в новой ОС, то - Lazarus Вам в руки :)
Для начала оговорюсь где и как я проверял/тестировл проекты.
В качестве ОС Linux был выбран "карманный" Slax с установленным пакетом Lazarus. Дополнительно, для сжатия исполняемых файлов использовался UPX.
В Windows использовалась Delphi 2010.
Проекты как в Lazarus так и в Delphi создавались абсолютно одинаковые - простая пустая форма с размером 300х300. Все подключенные по умолчанию модули были сохранены.

1. Работа с Lazarus.

Для новичков, думаю как и для меня, будет небольшой шок после компиляции пустой формы - размер исполняемого файла составил 18,864 Mb. Но, не стоитсразу бросать в Lazarus камни, лить помои на разработчиков и т.д. Не стоит забывать - мы имеем дело с кроссплатформенностью, а она, к соалению, требует жертв. Вот, что говорят по этому поводу сами разработчики (в моем вольном переводе):

Бинарные файлы имеют большой размер, потому что они включают в себя большое количество отладочной информации, необходимой для использования GDB (GNU Debugger).
Компилятор может удалить отладочную информацию из исполняемых файлов. Ранее, в версии компилятора 2.0.2. эта функция работала ошибочно, но начиная с версии 2.0.4. ошибка была исправлена.

Раз есть возможность сократить бинарник - будем её использовать. Первое, с чего начнем - штатные средства, предоставляемые Lazarus.

Первое, чем воспользуемся - утилитой strip, которая удаляет отладочную информацию из исполняемых файлов.
Утилита расположена в папке lazarusppbini386-win32
Открываем консоль, и записываем:

cd lazarus
strip --strip-all /файл

Жмем Enter и проверяем, что получилось. Было 18,864 Mb стало 3,299 Mb. Неплохо, да? Но, думаю, мало кого устроит проект с пустой формой размеров в три с лишним мегабайта. Поэтому, переходим ко второй стадии оптимизации размера исполняемого файла в Lazarus - настройкам IDE.
Открываем "Проект -- Параметры компилятора -- Код"
Ставил галку напротив "Умное связывание (-CX)" (см. рисунок)

Code optimization Lazarus

Переходим на вкладку "Связывание" и убираем галку напротив "Выдать номера строк в ошибках времени исполнения (-gl)"
Тут же ставим галку напротив "Вырезать символы из бинарника (-Xs)" - эту же самую функцию выполняет утилита strip.
Тут же савим галку на "Умное связывание (-XX)"
Жмем "Ок" и компилируем проект по новой.

Code optimization Lazarus

Результат - размер исполняемого файла 2,708 Mb. Сэкономили ещё 600 kb - неплохо.
Больше из IDE выжать ничего собого не получится. Даже если и удасться что-либо скроить то экономия будет крайне незначительна.
Переходим к последнему этапу оптимизации размера исполняемого файла - использование утилиты UPX. Использовать её элементарно - указываем в командной строке:

UPX 

жмем Enter и UPX сжимает файл на сколько это возможно.
Итог работы UPX - размер исполняемого файла 771 kb. Таким образом, в результате небольших манипуляций с Lazarus и UPX нам удалось сократить размер исполняемого файла практически на 96%.
Теперь посмотри как выглядит исполняемый файл от Lazarus на фоне Delphi.

2. Сраниваем исполняемые файлы от Lazarus и Delphi.

Создаем пустой проект в Delphi 2010, компилируем и в итоге получаем исполняемый файл размером 817 kb - чуть больше, чем оптимизированный и сжатый файл в Lazarus под Linux. Теперь осталось посмотреть, что станет с файлом после обработки UPX'ом.
Сжимаем файл и смотрим размер - 284 kb. Чтобы представить себе всё вышесказанное, я составил небольшую гистограмму, демонстрирующую размеры исполняемых файлов Lazarus и Delphi:

Lazarus vs Delphi

Как итог, можно отметить, что Lazarus в плане размеров исполняемых файлов ничем не уступает Delphi. Не суть, что для достижения результата требуется немного поработать "напильником" - в принципе то вполне ожидаемо в Linux и далеко не критично. Однако, в отличие от Delphi Lazarus дает возможность создавать проекты, которые с лёгкостью можно будет пересобирать под любой ОС. Так что, переходя (пока частично) под Linux я нисколько не расстраиваюсь по поводу отсутствия под рукой родной Delphi - её на все 100 заменит Lazarus.

Мой блог находят по следующим фразам

-------------------------
Если у Вас есть свой серьёзный бизнес не в Интернете, например магазин бытовой техники, то вам без сомнения пригодится Сканер штрих-кода Argox - отичный ручной сканер штрих-кодов с увеличеной дальностью действия.
-------------------------
Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (13)

WP_Cloudy
  • Alexo пишет:

    Там где «После настройки IDE» какие настройки использовались?

  • Vlad пишет:

    После настройки компилятора в IDE — только работа утилитой UPX

  • Alexo пишет:

    Я хотел узнать для Delphi какие настройки использовались. У 2010 тоже можно уменьшить размер файла убрав новый RTTI.

  • Vlad пишет:

    По поводу нового RTTI сказать ничего не могу, т.к. толком с ним не разбирался. Могу посоветовать зайти на http://delphi2010.ru — там есть информация по RTTI

  • Alexo пишет:

    Я не про это.
    Размер Delphi сравнивался без натсройки среды или с настройкой если с настройкой то какими, а если без то почему?

  • Vlad пишет:

    Delphi 2010 не настраивал. Т.к. плотно с настройками не разбирался и, самое главное, в свое время я отказался от использования Лазаруса именно по причине громоздких исполняемых файлов. А теперь просто решил сравнить на сколько Лазарус отстает от Делфи по размерам исполняемых файлов. В принципе, никто не мешает ужимать exe-файлы тем же UPX или включать в проекты Delphi флаги на вырезку релоков

  • dan пишет:

    Delphi ИМХО детская среда.
    А как вы относитесь к новшеству Google — GO?)

  • Vlad пишет:

    насчёт «детская среда» ИМХО спорный момент..очень спорный

  • Wlad пишет:

    2 dan
    а сколько вам-то самому лет, гражданин? ;)
    «детская»! дай бог остальным дорасти до этой «детскости»…

  • Javaca пишет:

     
    В Delphi 2010 проект с пустой формой после компиляции весит чуть более 100 Кб, в Delphi 3 — 10 Кб. Для этого в «Project Option» во вкладке «Packages» нужно поставить галочку «Build with runtime packages» и удалить в строке все кроме VCL, а во вкладке «Compiler» снять все галочки с «Debugging» и «Messages», обязательно проверить чтобы стояла галочка на «Optimization». Попробуйте полученный исполняемый файл размеров чуть более 100 Кб после этого обработать UPX’ом и сами увидите во сколько крат Delphi делает это убожество под названием Lazarus.
    Автор данной статьи умышленно искажает реальность выдаваемых размеров Delphi. Созданный по умолчанию проект (Delphi 2010) с пустой формой, компилируется в 300 Кб с копейками, а не в 817 Кб, как пишет автор.
     

  • SeregaAltmer пишет:

    Не работал с лазарем, но очень сомневаюсь что Vlad хотел нас обмануть.
    А вот в Delphi подобные действия: «в «Project Option» во вкладке «Packages» нужно поставить галочку «Build with runtime packages» и удалить в строке все кроме VCL» действительно значительно уменьшают размер файла, но обязуют таскать с проектом .bpl-ки, кому оно надо?

    А подобное — «во вкладке «Compiler» снять все галочки с «Debugging»», насколько мне известно на размер файла никак влиять не должно.

  • Shold пишет:

    Лично я для себя почерпнул много полезной информации. ТоварищЧам, которые пытаются противопоставить Lazarus дельфям хочется пожелать успехов! Наконец-то, спустя не одну пятилетку, под дельфю появился компилятор x64! И то, пока (насколько я знаю) только в бэтке. Тем самым аж в 2 раза (win32 + win64) увеличив число поддерживаемых дельфёй платформ! Lazarus же — проект молодой, к тому же open, и поддерживает каких-то 10 платформ, в том числе мобильных. Куда ж ему до великой Дельфи?!… А то что компонентов маловато, так это вопрос времени… ну.. или кривизны рук использующего. Лично мне, для кросс-платформенного сервера приложений вполне хватило. Да, топором и напильником… Но программирование — это и есть граммотное наследование классов, а не бездумное кидание готовых компонентов на форму. ЗЫ я ни в коем случае не против дельфи! В проектах под Win32 естесственно использую ее, но и тут время Lazarus-а придет!

  • Aleksei пишет:

    Javaca, твой способ, конечно, работает, но есть два больших НО!!! Во-первых пустая форма в делфи 2010 действительно весит 800 килов с чем-то, во вторых когда ставишь только галку Build with runtime packages, даже не удаляя ничего из строки, размер файла уменьшается с 800 килов, то 26(!!!)… НО… Приложение тогда запускается на системе, где установлен делфи. Если его нет то пишет ошибку о недостающих библиотеках. Так что твой способ работает, но потребуется все равно вместе с проектом копировать и нужные ему библиотеки.

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник

   


Кран мостовой --|--. Рубцы - лазерное удаление рубцов и растяжек. Удаление рубцов и растяжек.