什么是"条带"(GCC应用程序)用于?

Car*_*era 24 c c++ gcc

这个小应用程序是什么?

在没有任何选项的情况下使用它会减少可执行文件的大小,但它如何/它做什么?

dmc*_*kee 26

从(Mac OS X,但其他人类似)手册页:

strip删除或修改附加到汇编器和链接编辑器输出的符号表.这在调试程序后节省空间并限制动态绑定符号很有用.

请注意"在调试程序之后",因为调试剥离的可执行文件非常困难."限制动态绑定符号"是一种罕见的用法:它允许您通过删除指示实际代码所在位置的索引条目来使外部库中的某些功能无法访问.这也在手册页中进行了解释.

在大多数情况下,像磁盘一样便宜和丰富,你根本不会再烦恼了.但您可能希望它适用于空间受限的情况,如嵌入式设备,救援磁盘等.

  • 只要您保留可执行文件的未经剥离的副本,就可以在需要时自由发送剥离版本并针对未剥离的版本进行调试.这在嵌入式开发中很常见,例如:如果核心文件(来自运行剥离二进制文件的客户)来自该字段,您可以将未提取的二进制文件加载到gdb中,然后打开核心文件并具有完全符号可调试性. (22认同)
  • 虽然硬盘空间很便宜,但磁盘性能却不是.二进制文件越小,加载应用程序/库时必须执行的磁盘I/O就越少. (18认同)
  • 我会说的.胖程序让我可敬的强大计算机陷入了令人遗憾的爬行状态.程序员!小是美丽的!请注意,加载时间缓慢的另一个原因是碎片库.他们是碎片,使他们更细粒度,避免 - 哈哈 - 不必要的装载.这在快速随机访问SSD时代更为重要. (4认同)
  • 剥离此处未提及的符号的最终好处是,它使黑客的工作更加困难(至少对于C++而言,对Java或Objective-C等反射语言的帮助不大). (2认同)

Meh*_*ari 7

它从二进制文件中删除符号信息.二进制包含一些将符号(例如函数名称)映射到特定位置的信息.strip删除那些.