Чтобы выяснить, каким же образом можно сжать и без того небольшой файл, давайте обратимся к опыту визуального программирования. Что мы делаем, когда хотим минимизировать объём своего проекта в Lazarus? Во-первых, ещё до начала работы с кодом отключаем добавление отладочной информации (иначе есть шанс получить форму с двумя кнопками весом в 12 Мбайт), во-вторых, после компиляции запускаем утилиту strip или upx.
Итак, начнём наш эксперимент. У меня в папке bin лежит исходник с именем test.pas. Давайте попробуем скомпилировать его с разными вариантами настроек.
- Стандартная конфигурация (только что установленный FPC без всяких наворотов) – 67521 байт.
- Включаем «Generate smaller code» и «Create smartlinkable units» в меню «Options» -> «Compiler» -> «Generated code», выключаем «Range checking» и «Stack checking» - 67455 байт.
- Включаем все три уровня оптимизации в том же меню – а вот это, как показала практика, не помогает вообще.
Теперь попробуем воспользоваться утилитой strip. Для её запуска нужно открыть командную строку, перейти в папку с файлом strip.exe (команда cd вам в помощь), а затем ввести в окне cmd инструкцию strip --strip-all путь_к_файлу_вашей_программы. Применив её к своему test.exe, я получила приложение объёмом 40448 байт.
Upx в «чистом» Free Pascal’е нет, поэтому грузим его отсюда: https://upx.github.io/. Архив распаковываем в ту же папку, что и strip. Полное руководство по этому пакету вы сможете найти в файле upx.doc, я подскажу только один вариант работы с программой:
- Переходим с помощью команды cd в каталог, куда устанавливали upx.
- Вбиваем строку upx --brute путь_к_файлу_вашей_программы и нажимаем Enter.
На этом этапе может открыться один из минусов такого способа сжатия exe-шников, а именно – очень натянутые отношения между архиватором и антивирусами вроде avast! Free Antivirus. Но если вас это не беспокоит, то вот результат использования утилиты upx: объём моего test.exe стал равен всего лишь 19968 байт.
Полезные ссылки по теме:
https://www.freepascal.org/docs-html/prog/progse51.html#x256-27000011.5 – «Tips to generate smaller code»
http://wiki.freepascal.org/File_size_and_smartlinking - это больше про Lazarus, но для Free Pascal тоже актуально.
Комментариев нет:
Отправить комментарий