gcc编译的二进制文件有不同的大小?

Bil*_*pey 11 c++ linux gcc elf

如果在w/gcc的不同时间构建相同的代码,则生成的二进制文件将具有不同的内容.好吧,我对此并不狂热,但事实就是如此.

但是,我最近遇到的情况是,使用相同版本的gcc构建的相同代码生成的二进制文件大小与先前版本不同(大约1900字节).

有谁知道可能导致这些情况的原因是什么?这是某种ELF问题吗?是否有任何工具(除了ldd)可用于转储二进制文件的内容以查看究竟有什么不同?

提前致谢.

Bil*_*pey 9

我已经设法解决了问题,至少让我感到满意,并希望传递我发现的东西.

使用readelf,(readelf -a -W)我创建了一个报告,列出了两个版本的内容并对它们进行了比较(使用Beyond Compare).这表明一些额外的符号从升级库中被拉入.

瞧,我们实际上正在构建一个不同版本的依赖库,并没有意识到它.在这种情况下没有伤害,但知道你的可执行文件中有什么是好的.

感谢所有人的周到回复.


caf*_*caf 8

objdump 可能是您要寻找的程序转储二进制文件的内容.

objdump -h 将显示部分及其大小,因此您应该能够看到尺寸变化发生的位置,然后进一步深入了解原因.


Dir*_*tel 3

一个可复制的例子会有所帮助:

  • 您使用其他外部库吗?
  • 你是静态链接还是动态链接?
  • 您是否更改了 -O 或 -s 等标志?