相同的源代码,不同的可执行文件大小?



在 AIX 中,不同版本的编译器会使可执行文件(或库(的大小不同吗?

问题

什么会影响可执行文件/库的大小?

  • 不同版本的编译器。
  • 不同的编译选项。
  • 不同的操作系统版本及其库(如libm.a,libpthread.a ..(。
  • 更多?

一些背景。

在这里,我们有一堆旧的可执行文件和库,它们不是版本控制下的源代码。我们需要弄清楚可执行文件是从我们拥有的源代码构建的。所以我们再次构建它,但结果(exec,libs(的大小不同。

尝试..

我试过了。。

  • dump -X64 -c :它显示了构建它时使用的编译器的一些信息。二进制文件的编译器版本是'IBM XL C/C++。11.1.0.14'. 但是我们拥有的编译器版本是'IBM ..11.1.0.13'. 这些能有所作为吗?
  • ar -X64 -x :比较从存档中提取的文件。 当我"制作"一些库时,会生成对象文件(*.o(。 大多数文件的大小相同,但有些文件的大小不同。当转储它们(具有不同大小的文件(时,编译器是不一样的。

任何帮助,建议,链接都会有所帮助。谢谢。

什么会影响可执行文件/库的大小?

不同版本的编译器。

答案是肯定的!它可以生成非常不同的二进制文件,不仅大小不同。它从不同的代码位置和完全不同的同一源组装开始。

不同的编译选项。

它必须改变大小!如果针对大小或速度进行优化,则结果必须不同。 想想循环展开...

不同的操作系统版本及其库(如libm.a,libpthread.a ..(。

由于它们也使用不同的编译器编译,因此答案是递归的:-(

更多?

也许是无穷无尽的清单?链接时的文件排序,不同的链接器选项,...

我的提示:

可执行文件的大小只是第一次检查。您可以拥有相同大小的不同可执行文件,非常清楚。

即使您具有具有相同库和相同操作系统的相同编译器,您也需要使用相同的构建脚本/制作进行构建才能获得相同的结果。如果有任何不同(编译器/库/编译器和/或链接器标志、文件排序不同(,则链接的可执行文件不同!

简而言之:如果您无法为构建重现环境的精确副本,则即使源代码相同,您也永远不会看到相同的可执行文件!

相关内容

最新更新