相同的源代码,不同的可执行文件大小?
Same source code, different executable size?
在 AIX 中,不同版本的编译器是否可以使可执行文件(或库)大小不同?
问题
什么会影响 executable/libraries 的大小?
- 不同版本的编译器。
- 不同的编译选项。
- 不同的 os 版本及其库(如 libm.a、libpthread.a ..)。
- 更多?
一些背景。
在这里,我们有一堆旧的可执行文件和库,它们不是版本控制下的源代码。我们需要弄清楚可执行文件是从我们拥有的源代码构建的。所以我们再次构建它,但是结果(exec,libs)的大小不一样。
尝试..
我试过了..
- dump -X64 -c : 它显示了构建它时使用的编译器的一些 infos。二进制文件的编译器版本是 'IBM XL C/C++ .. 11.1.0.14'。但是我们拥有的编译器版本是'IBM .. 11.1.0.13'。这些能有所作为吗?
- ar -X64 -x :比较从存档中提取的文件。当我做 "make" 一些库时,生成了目标文件 (*.o)。 most 个文件大小相同,但有些文件不相同。转储它们(具有不同大小的文件)时,编译器不相同。
任何帮助、建议和链接都会有所帮助。谢谢。
What can affects on size of executable/libraries?
Different version of compiler.
当然可以!它可以生成非常不同的二进制文件,不仅大小不同。它以不同的代码位置开始,并且对于同一来源完全不同 assemble。
Different compile options.
一定要改尺寸!如果您针对大小或速度进行优化,结果一定会有所不同。考虑循环展开...
Different os version and its libraries(like libm.a, libpthread.a ..).
因为它们也是用不同的编译器编译的,所以答案是递归的:-)
More?
也许是一个无穷无尽的清单?链接时的文件排序、不同的链接器选项、...
我的提示:
可执行文件的大小只是第一次检查。你可以有相同大小的不同可执行文件,很清楚。
即使您有相同的编译器和相同的库和相同的 OS 运行,您也需要使用相同的构建 script/make 来构建以获得相同的结果。如果有任何不同( compiler/libs/compiler and/or 链接器标志、文件顺序不同,则链接的可执行文件不同!
简而言之:如果您不能为您的构建复制环境的精确副本,您将永远不会看到相同的可执行文件,即使源是相同的!
在 AIX 中,不同版本的编译器是否可以使可执行文件(或库)大小不同?
问题
什么会影响 executable/libraries 的大小?
- 不同版本的编译器。
- 不同的编译选项。
- 不同的 os 版本及其库(如 libm.a、libpthread.a ..)。
- 更多?
一些背景。
在这里,我们有一堆旧的可执行文件和库,它们不是版本控制下的源代码。我们需要弄清楚可执行文件是从我们拥有的源代码构建的。所以我们再次构建它,但是结果(exec,libs)的大小不一样。
尝试..
我试过了..
- dump -X64 -c : 它显示了构建它时使用的编译器的一些 infos。二进制文件的编译器版本是 'IBM XL C/C++ .. 11.1.0.14'。但是我们拥有的编译器版本是'IBM .. 11.1.0.13'。这些能有所作为吗?
- ar -X64 -x :比较从存档中提取的文件。当我做 "make" 一些库时,生成了目标文件 (*.o)。 most 个文件大小相同,但有些文件不相同。转储它们(具有不同大小的文件)时,编译器不相同。
任何帮助、建议和链接都会有所帮助。谢谢。
What can affects on size of executable/libraries?
Different version of compiler.
当然可以!它可以生成非常不同的二进制文件,不仅大小不同。它以不同的代码位置开始,并且对于同一来源完全不同 assemble。
Different compile options.
一定要改尺寸!如果您针对大小或速度进行优化,结果一定会有所不同。考虑循环展开...
Different os version and its libraries(like libm.a, libpthread.a ..).
因为它们也是用不同的编译器编译的,所以答案是递归的:-)
More?
也许是一个无穷无尽的清单?链接时的文件排序、不同的链接器选项、...
我的提示:
可执行文件的大小只是第一次检查。你可以有相同大小的不同可执行文件,很清楚。
即使您有相同的编译器和相同的库和相同的 OS 运行,您也需要使用相同的构建 script/make 来构建以获得相同的结果。如果有任何不同( compiler/libs/compiler and/or 链接器标志、文件顺序不同,则链接的可执行文件不同!
简而言之:如果您不能为您的构建复制环境的精确副本,您将永远不会看到相同的可执行文件,即使源是相同的!