【问题标题】:Object files without ELF header or ways to reduce object file size with GCC?没有 ELF 标头的目标文件或使用 GCC 减小目标文件大小的方法?
【发布时间】:2010-12-16 11:58:38
【问题描述】:

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

像 strip/sstrip 这样的工具并没有多大用处,因为目标文件必须保留符号(稍后将被链接)。 (-strip-unneeded 和 -R .comment -R .gnu.version 发挥了他们的魔力)。

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

【问题讨论】:

    标签: gcc


    【解决方案1】:

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

    【讨论】:

    • 哦,好的。我相信我需要编写一个工具来尝试最小化(压缩的)ELF 标头大小。感谢您的回复。
    【解决方案2】:

    如果您通过压缩算法运行目标文件,那些“大量的零”应该会缩小一个很大的倍数,因为它们的信息含量很低。您可能想研究一种更好的压缩算法,如果可能的话,也许比使用修改/非标准“黑客”目标文件格式获得更多收益。

    【讨论】:

    • 我正在使用 7z 来压缩目标文件。它确实做得很棒,但我想即使在这里和那里摆脱一些随机字节也会产生很大的不同。现在,使用嵌入式解压缩+链接脚本,目标文件压缩到 540 字节。我的目标是减少到
    • @youngdood:一本您可能感兴趣的好书:A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux。他创建了最小的 ELF 程序并解释了它的所有内容。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多