5

我在我的应用程序中使用了相当复杂的数据结构(主要使用 STL 容器),并使用 Boost (v1.34) 对它们进行序列化。

每当我使用调试符号 (gcc -g) 进行编译时,生成的可执行文件都会变得很大——大约 25 MB。剥离所有调试符号会将大小减小到 ~3 MB。

我试图确定大小增加的原因,似乎序列化方法是原因。特别是,调用序列化的模块的目标文件(如“oarchive << myObject”之类的代码)很大,注释掉序列化部分会显着减小大小。

是否可以阻止这些符号的生成,或者有选择地去除它们?
剥离所有符号不是一种选择,因为我需要为自己的代码调试符号。

4

2 回答 2

4
  1. 将带有序列化调用的代码放入单独的模块,将它们编译为大型目标文件。
  2. 在它们上使用strip --strip-debug以仅删除这个大的调试符号(稍后您肯定需要它来调试序列化库中的崩溃:)
  3. 利润!将剥离的包装器和未剥离的其他模块链接在一起。
于 2011-05-19T15:46:42.483 回答
2
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*
于 2012-08-08T19:56:32.110 回答