从 GCC 可执行文件中删除符号和 RTTI 文本
Strip symbols and RTTI text from GCC executable
我的项目大量使用模板元编程。大多数操作发生在递归模板中,这些模板生成具有很长(损坏)符号名称的对象和函数。
尽管构建时间仅为 ~30 秒,但生成的可执行文件约为 MB 大小,而且主要是符号名称。
在 Linux 上,向 GCC 添加-s
参数会使大小减小到 ~300 KiB,但使用文本编辑器快速浏览一下就会发现那里仍然有很多繁琐的名称。我找不到如何在OS X上正确剥离任何内容...暂时将其注销。
我怀疑用于提供typeid(x).name()
的 vtable 条目占用了很大一部分。删除typeid
运算符的所有使用并没有导致Linux上更多的剥离。我认为默认异常处理程序使用该工具来报告未捕获的异常的类型。
如何在可执行文件中最大化条带页并最小化这些千字节大小的符号?
只需在最终可执行文件上运行程序strip
即可。 如果你想更高级,你可以使用其他一些工具来单独存储调试信息,但对于你所说的目的,只要strip a.out
就可以了。 也许使用 --strip-all
选项 - 我自己还没有尝试过,看看它是否与默认行为不同。
如果您真的想尝试禁用RTTI,那么gcc -fno-rtti
。 但这可能会严重破坏你的程序 - 我想只有一种方法可以找出答案。
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何根据单词在文本中出现的概率输出单词
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- C++试图读取一个文件并输出到另一个文本文件
- 从 GCC 可执行文件中删除符号和 RTTI 文本