Использование boost :: serialization значительно увеличивает размер двоичного файла - PullRequest
5 голосов
/ 19 мая 2011

Я использую довольно сложные структуры данных (в основном, с контейнерами STL) в своем приложении и сериализую их, используя Boost (v1.34).

Всякий раз, когда я компилирую с символами отладки (gcc -g), полученный исполняемый файл становится огромным - около 25 МБ. Удаление всех символов отладки уменьшает размер до ~ 3 МБ.

Я попытался зафиксировать причину увеличения размера, и, похоже, причина в сериализации. В частности, объектные файлы для модулей, вызывающих сериализацию (код типа «oarchive << myObject»), имеют большой размер, а комментирование части сериализации значительно уменьшает размер. </p>

Можно ли предотвратить генерацию этих символов или выборочно удалить их?
Удаление всех символов не вариант, так как мне нужны отладочные символы для моего собственного кода.

Ответы [ 2 ]

4 голосов
/ 19 мая 2011
  1. Поместите свой код с помощью вызовов сериализации в отдельные модули, скомпилируйте их в большие объектные файлы.
  2. Используйте strip --strip-debug , чтобы удалить только эти большие символы отладки (которые вам, безусловно, понадобятся позже для отладки сбоев внутри библиотеки сериализации:)
  3. Прибыль! Свяжите разорванные обертки и отсоедините другие модули вместе.
2 голосов
/ 08 августа 2012
strip -w -K '!*serialization*'

Легко, не нужно заниматься сборкой гимнастики.Вот улучшение, внесенное в мой двоичный файл:

# ls -lh EnrollGUI 
-rwxr-xr-x. 1 root root 17M Aug  8  2012 EnrollGUI*
# strip -w -K '!*serialization*' EnrollGUI
# ls -lh EnrollGUI 
-rwxr-xr-x. 1 root root 1.1M Aug  8  2012 EnrollGUI*
...