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

问题描述 投票:-1回答:1

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

问题

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

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

某些背景。

在这里,我们有一堆旧的可执行文件和库,它们不是版本控制下的源代码。我们需要找出可执行文件是从我们拥有的源代码构建的。因此,我们再次构建它,但是result(exec,libs)的大小不相同。

重试..

我尝试过..

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

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

c++ unix aix xlc
1个回答
0
投票
什么会影响可执行文件/库的大小?
不同版本的编译器。

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

不同的编译选项。

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

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

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

更多?

也许无休止的清单?链接时的文件顺序,不同的链接器选项,...

我的提示:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.