相同的源但编译二进制不同

你好 我使用ccarm编译器在WinXP上为VxWorks开发C / C ++。我想在很久以前建立的已发布交付之上添加一个热修复程序。来源保留在Clear Case上,每个交货都贴上标签。因此,可以访问特定交付的源代码。 为了确保从原始发布的版本没有任何改变,我必须确保我可以再次构建相同的输出文件。 这是问题所在;我从CC服务器检索源并构建它们。然后我将输出文件与相应的发布输出进行比较(输出文件的类型为* .lad文件+文件格式为elf32-littlearm)。差别很大(不是一些时间戳)。另一方面,我也比较汇编列表,它们也不同。 你知道什么会导致这样的差异吗? 在我看来,可能导致这种差异的项目清单 - 释放的输出是在不同的PC(再次使用WinXP)上构建的,带有自动构建脚本。新的输出是在我的本地构建的,具有相同的编译器和设置。 - 从存储库中检索到错误的标签 有什么要补充的吗? 提前致谢     
已邀请:
您可以使用
readelf
objdump
获取有关binarie文件的一些详细信息,包括符号列表。 通过比较两者,您可以找出差异的原因。 如果您以前从未使用过readelf或objdump,可以在线找到大量文章和文档。 但是如果你使用相同的标签,使用相同的工具链(和相同的选项),输出就没有理由不同。     
你好 我对网络的搜索表明,二进制可重复性与增量构建问题有关。 如果您的构建系统配置为非增量,则所有内容都是从头开始构建的。使用此配置,即使两个连续的构建也会在输出图像和asm列表中产生巨大差异。 (我使用objdump -d来获取asm列表) 但是如果使用增量构建,那么输出图像仍然存在巨大差异,asm列表只有1-2行差异。 我的策略是依靠CM工具和标签。但我会提前检查readelf。 谢谢     

要回复问题请先登录注册