从GCC可执行文件中剥离符号和RTTI文本

时间:2013-10-17 12:36:01

标签: c++ linux gcc rtti

我的项目大量使用模板元编程。大多数动作都发生在递归模板中,这些模板生成具有非常长(受损)符号名称的对象和函数。

尽管构建时间只有大约30秒,但生成的可执行文件大约是一兆字节,而且它主要是符号名称。

在Linux上,向GCC添加-s参数会使大小降低到~300 KiB,但使用文本编辑器快速查看显示仍然有很多繁琐的名称。我无法在OS X上找到如何正确剥离任何东西......现在就把它写下来。

我怀疑提供typeid(x).name()的vtable条目占了很大一块。删除typeid运算符的所有使用并没有导致在Linux上删除任何更多内容。我认为默认的异常处理程序使用工具来报告未捕获的异常的类型。

如何在我的可执行文件中最大化strippage并最小化这些千字节大小的符号?

1 个答案:

答案 0 :(得分:-2)

只需在最终的可执行文件上运行程序strip。如果你想变得更加漂亮,可以使用其他一些工具分别存储调试信息,但出于你的声明目的,只需strip a.out即可。也许使用--strip-all选项 - 我自己没有尝试过,看它是否与默认行为不同。

如果您真的想尝试禁用RTTI,那么它就是gcc -fno-rtti。但这可能会严重破坏你的计划 - 只有一种方法可以找到我的猜测。