没有ELF标头的对象文件或使用GCC减少对象文件大小的方法?

时间:2010-12-16 11:58:39

标签: gcc

我正在使用GCC编译一些C代码。有没有办法剥去,例如来自目标文件的ELF头并使链接器添加头?或者,是否还有其他可能性来删除生成的目标文件大小而不是明显的-Os和-s标志?( - ffast-math,-fomit-frame-pointer,-shshort -doubles确实有助于减少代码大小但是有效目标文件显示了大量的“看似”无用的零。

像strip / sstrip这样的工具并没有多大用处,因为目标文件必须保留符号(稍后会链接它)。 (-strip-unneeded和-R .comment -R .gnu.version尽其所能。)

我正在做的是要求我将(压缩的)目标文件捆绑到用户并嵌入脚本以在用户端链接它的东西。每个字节都很重要!

3 个答案:

答案 0 :(得分:1)

以后无法删除和恢复ELF标头,因为有价值的信息存储在那里然后永远丢失(例如某些表,架构等的文件偏移量.IIRC)。你已经列出了几乎所有可以减小尺寸的东西,除了bzip'ing。

答案 1 :(得分:0)

如果通过压缩算法运行目标文件,那些“大量零”应该缩小很多因素,因为它们的信息内容很少。你可能想要研究一个更好的压缩算法,也许它可以获得更多,而不是去修改/非标准的“黑客”目标文件格式,如果可能的话。

答案 2 :(得分:0)

您可以尝试使用-fdata-sections-ffunction-sections-Wl,--gc-sections,但这不安全,因此请务必在使用它们之前了解它们的工作原理。