【发布时间】:2018-05-21 07:24:22
【问题描述】:
场景: 应该在新机器上重复构建 C++ 项目(在 Linux 下使用 gcc)。
如果构建使用相同的 gcc 版本: 构建输出(二进制文件)是否相同?或者二进制文件中包含的时间戳、路径或其他信息是否使它们不同? 如果输出不相同:是否可以比较输出以查看二进制文件是否“功能”相同? IE。是否可以调用一个工具来比较二进制文件中的实际代码(没有元数据,例如调试信息)?
动机: 我必须准备一个干净的新 Linux 系统,必须在其上构建一个软件系统(由其他人开发,我们称之为 X)。 为了构建软件,我将获得一个包含构建脚本、makefile 等的源代码树。 现在我必须检查构建输出是否与 X 提供的最后一个构建相同(并且构建在他们的系统上)。我需要这样做以确保将移交的源代码与用于构建我们从 X 以二进制形式获得的最后一个版本的源代码相同。
【问题讨论】:
-
您是否尝试过使用
diff命令对2 个文件的objdump -d FILE命令的输出进行比较? -
你的最终目标是什么?二进制兼容性,或功能正确性?前者需要就某种 ABI 达成一致,后者是我想的系统测试的全部内容......
-
@MassimilianoJanes:编辑问题以解释其背后的动机。