Решение проблемы размера исполняемого файла
Модератор: Модераторы
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Решение проблемы размера исполняемого файла
Кто сталкивается с лазарусом в первую очередь удивляется большому размеру исполняемого файла. Все мы знаем причину и как с ней бороться, но хотелось бы все же эту проблему устранить полностью. И, в принципе, разработчикам fpc это удалось. А суть решения - создать отдельный файл с отладочной информацией. Нужно отлаживать - gdb подхватывает этот файл сам.
В чем собственно вопрос. Как обычно, надо протестировать эту особенность. Открываем compiler options - Linking - "Use external gdb debug symbols file (-Xg)" - ставим галочку.
Естественно сами мы тестировали, но у вас гораздо больше систем, приложений, и др. особенностей.
В чем собственно вопрос. Как обычно, надо протестировать эту особенность. Открываем compiler options - Linking - "Use external gdb debug symbols file (-Xg)" - ставим галочку.
Естественно сами мы тестировали, но у вас гораздо больше систем, приложений, и др. особенностей.
Разделяет
Я так понял, что компиляция с -Xg полностью переносит отладочную информацию не только приложения, но и модулей fpc, rtl и Lcl, даже если они были откомпилированы без -Xg.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Какой-то хитрый вопрос
Вся (без разбора на rtl, fcl, lcl) отладочная информация, которая раньше была свалена в исполняемый файл, теперь лежит рядом в другом файле.
Павел Ишенин писал(а):И, в принципе, разработчикам fpc это удалось.
О какой версии FPC/Lazarus идет речь?
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
fpc видимо 2.2.2 (хотя может быть и раньше? ) а вот lazarus - тот что в trunk. Если ошибок работы не будет, то опция скорее всего будет включена по умолчанию для всех новых и старых проектов.
Павел Ишенин писал(а):Какой-то хитрый вопросВся (без разбора на rtl, fcl, lcl) отладочная информация, которая раньше была свалена в исполняемый файл, теперь лежит рядом в другом файле.
Дело в том, что сначала я просто откомпилировал проект, выставив -Xg, а fpc и Lazarus не компилировались. Получил выполняемый файл 6,2Мб и отладочный 9,1Мб. Обработка утилитой strip не изменила размер. После этого решив, что библиотеки, то содержат отладочную информацию, я перекомпилировал fpc и lazarus с -Xg, - получил исполняемый файл 6,3Мб, а отладочный по прежнему 9,1. Вот такой хитрый эксперимент и породил хитрый вопрос
Компилирование не-Lazarus проекта даёт уменьшение исполняемого файла на 400 байт. Ура, товарищи! 
При использовании Lazarus 0.9.26 / fpc 2.2.2, опцию можно включить, вписав ее в /etc/fpc.cfg (или другой cfg, какой Вы используете).
Добавлено спустя 7 минут 51 секунду:
Интересно, Lazarus из SVN и fpc 2.3.1 дали файлы выполняемый 6.2 и дебаг 9.1.
А Lazarus 0.9.26 /fpc 2.2.2 дали файлы выполняемый 6.4 и дебаг 11 мегабайт.
Добавлено спустя 1 час 3 минуты 21 секунду:
Ну вот, есть одна неприятность
Если откомпилировать fpc 2.2.2 с -Xg, то Lazarus 0.9.26 не компилируется. Это не для разработчиков, а для экспериментаторов
Но проекты компилируются и дебаг отделяется в отдельный файл нормально.
Добавлено спустя 7 минут 51 секунду:
Интересно, Lazarus из SVN и fpc 2.3.1 дали файлы выполняемый 6.2 и дебаг 9.1.
А Lazarus 0.9.26 /fpc 2.2.2 дали файлы выполняемый 6.4 и дебаг 11 мегабайт.
Добавлено спустя 1 час 3 минуты 21 секунду:
Ну вот, есть одна неприятность
Если откомпилировать fpc 2.2.2 с -Xg, то Lazarus 0.9.26 не компилируется. Это не для разработчиков, а для экспериментаторов
Но проекты компилируются и дебаг отделяется в отдельный файл нормально.
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
Что-то в сегодняшнем снапшоте 0.9.26.1 (17256) ничего такого не видно. Оно в 0.9.26 вообще будет?Павел Ишенин писал(а):fpc видимо 2.2.2 (хотя может быть и раньше? ) а вот lazarus - тот что в trunk. Если ошибок работы не будет, то опция скорее всего будет включена по умолчанию для всех новых и старых проектов.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Если тестирование выявит работоспособность то будет в 0.9.26.2 иначе только в 0.9.28. Тестируйте. Интересен результат на linux и mac osx.
Павел Ишенин писал(а):Если тестирование выявит работоспособность то будет в 0.9.26.2 иначе только в 0.9.28. Тестируйте. Интересен результат на linux и mac osx.
Значит связка fpc 2.2.2 / Lazarus 0.9.26 тоже актуальна. Хорошо, детально еще перепроверу описаную выше проблему и выложу.
- Attid
- долгожитель
- Сообщения: 2588
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
ГУИ
билд
стрип
-Xg билд
strip
консольное приложение
билд
-Xg билд
билд
Код: Выделить всё
38531027 2008-11-07 19:58 acстрип
Код: Выделить всё
5789256 2008-11-07 19:59 ac-Xg билд
Код: Выделить всё
5789336 2008-11-07 20:00 ac
32743627 2008-11-07 20:00 ac.dbgstrip
Код: Выделить всё
5789336 2008-11-07 20:02 acконсольное приложение
билд
Код: Выделить всё
13517274 2008-11-07 20:03 ack-Xg билд
Код: Выделить всё
3461232 2008-11-07 20:04 ack
10057762 2008-11-07 20:04 ack.dbg
Тест под Linux x86_64, SuSe 11,0. Lazarus 0.9.26, fpc 2.2.2
При первой компиляции fpc c установленными одновременно -Xs -Xg (-Xs случайно не заметил) привело к тому, что Lazarus перестал компилироваться, жалуясь на отсутствие DEBUG_* переменных во всех модулях lazarus. Перекомпилировав fpc c "-g -gl -Xg" все заработало и дальнейшее присутствие -Xs почему-то не влияло никаким образом. Видимо нужно будет установить зависимость ключей, если включен srip (-Xs), то -Xg неактивный, ведь и смысла в нем тогда нет.
Дебагер заработал, вроде ведет себя так же, как и прежде. Никаких пока неприятностей не замечено.
Если компилируете из Lazarus 0.9.26, то -Xg лучше прописать в Project->Compiler Options->Other. Внизу memo поле с заголовком Custom options. Там и вписываем -Xg.
Сам Lazarus смог перекомпилировать только из коммандной строки:
## make clean all PP=/usr/local/lib/fpc/2.2.2/ppcx64 COMPILER_OPTIONS="-g -gl -Xg"
В IDE Lazarus, я не нашел, как заставить самого Lazarus перекомпилироваться с -Xg.
При первой компиляции fpc c установленными одновременно -Xs -Xg (-Xs случайно не заметил) привело к тому, что Lazarus перестал компилироваться, жалуясь на отсутствие DEBUG_* переменных во всех модулях lazarus. Перекомпилировав fpc c "-g -gl -Xg" все заработало и дальнейшее присутствие -Xs почему-то не влияло никаким образом. Видимо нужно будет установить зависимость ключей, если включен srip (-Xs), то -Xg неактивный, ведь и смысла в нем тогда нет.
Дебагер заработал, вроде ведет себя так же, как и прежде. Никаких пока неприятностей не замечено.
Если компилируете из Lazarus 0.9.26, то -Xg лучше прописать в Project->Compiler Options->Other. Внизу memo поле с заголовком Custom options. Там и вписываем -Xg.
Сам Lazarus смог перекомпилировать только из коммандной строки:
## make clean all PP=/usr/local/lib/fpc/2.2.2/ppcx64 COMPILER_OPTIONS="-g -gl -Xg"
В IDE Lazarus, я не нашел, как заставить самого Lazarus перекомпилироваться с -Xg.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
очевидно нужен lazarus из trunk чтобы поставить эту опцию в IDE
Тест под Linux Mandriva 2009.0, Lazarus Trunk, FPC 2.3.1
Lazarus из Trunk работает на отлично. Опция везде корректно включается(и галочкой и вписыванием в строки опций), во всяком случае, проблем не встретил. Пробовал на fpc 2.3.1, довольно долго пришлось поработать с дебагером, - ведет себя стандартно. Не заметил ничего отрицательного.
Lazarus 0.9.26 /fpc 2.2.2 в работе ведут себя нормально, не встретил каких-либо новых проблем или особенностей с отладчиком.
Lazarus из Trunk работает на отлично. Опция везде корректно включается(и галочкой и вписыванием в строки опций), во всяком случае, проблем не встретил. Пробовал на fpc 2.3.1, довольно долго пришлось поработать с дебагером, - ведет себя стандартно. Не заметил ничего отрицательного.
Lazarus 0.9.26 /fpc 2.2.2 в работе ведут себя нормально, не встретил каких-либо новых проблем или особенностей с отладчиком.
