首页 > 解决方案 > 相同的源代码,不同的可执行文件大小?

问题描述

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

问题

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

一些背景。

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

尝试..

我试过了..

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

标签: c++unixaixxlc

解决方案


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

不同版本的编译器。

当然!它可以生成非常不同的二进制文件,不仅大小不同。它从不同的代码位置开始,对同一源代码完全不同的汇编。

不同的编译选项。

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

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

因为它们也是用不同的编译器编译的,所以答案是递归的:-)

更多的?

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

我的提示:

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

即使您有相同的编译器,运行相同的库和相同的操作系统,您也需要使用相同的构建脚本/make 来构建以获得相同的结果。如果有什么不同(编译器/库/编译器和/或链接器标志、文件顺序不同,则链接的可执行文件不同!

简而言之:如果您无法为您的构建复制环境的精确副本,您将永远不会看到相同的可执行文件,即使来源相同!


推荐阅读