使用boost :: serialization会大大增加二进制大小

时间:2011-05-19 14:26:03

标签: c++ linux gcc boost boost-serialization

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

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

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

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

2 个答案:

答案 0 :(得分:4)

  1. 将带有序列化调用的代码放到单独的模块中,将它们编译为大型目标文件。
  2. 在它们上使用 strip --strip-debug 只删除这些大调试符号(稍后您将需要调试序列化库中的崩溃:)
  3. 利润!将剥离的包装器和未剥离的其他模块链接在一起。

答案 1 :(得分: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*