3

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

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

在 Linux 上,向-sGCC 添加一个参数可以将大小降低到约 300 KiB,但使用文本编辑器快速查看会发现其中仍然有很多繁琐的名称。我找不到如何在 OS X 上正确剥离任何东西……现在就将其注销。

我怀疑提供的 vtable 条目typeid(x).name()占用了很大一部分。删除对typeid操作符的所有使用并不会导致在 Linux 上剥离更多内容。我认为默认异常处理程序使用该工具来报告未捕获异常的类型。

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

4

1 回答 1

-2

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

如果你真的想尝试禁用 RTTI,好吧,它是gcc -fno-rtti. 但这可能会严重破坏您的程序——我猜只有一种方法可以找出答案。

于 2013-10-17T12:38:50.213 回答