【问题标题】:Linux/gcc: Is there a way to check if a build is identical to a previous one on a different machine?Linux/gcc:有没有办法检查构建是否与不同机器上的先前构建相同?
【发布时间】:2018-05-21 07:24:22
【问题描述】:

场景: 应该在新机器上重复构建 C++ 项目(在 Linux 下使用 gcc)。

如果构建使用相同的 gcc 版本: 构建输出(二进制文件)是否相同?或者二进制文件中包含的时间戳、路径或其他信息是否使它们不同? 如果输出不相同:是否可以比较输出以查看二进制文件是否“功能”相同? IE。是否可以调用一个工具来比较二进制文件中的实际代码(没有元数据,例如调试信息)?

动机: 我必须准备一个干净的新 Linux 系统,必须在其上构建一个软件系统(由其他人开发,我们称之为 X)。 为了构建软件,我将获得一个包含构建脚本、makefile 等的源代码树。 现在我必须检查构建输出是否与 X 提供的最后一个构建相同(并且构建在他们的系统上)。我需要这样做以确保将移交的源代码与用于构建我们从 X 以二进制形式获得的最后一个版本的源代码相同。

【问题讨论】:

  • 您是否尝试过使用diff 命令对2 个文件的objdump -d FILE 命令的输出进行比较?
  • 你的最终目标是什么?二进制兼容性,或功能正确性?前者需要就某种 ABI 达成一致,后者是我想的系统测试的全部内容......
  • @MassimilianoJanes:编辑问题以解释其背后的动机。

标签: c++ linux gcc build


【解决方案1】:

如果构建使用相同的 gcc 版本:构建输出(二进制文件)是否相同?

CPU 的变化不仅仅是 GCC 的版本和它所做的静态链接。我相信您正在寻找的答案在于here

它基本上归结为“它取决于”。 引用 Rici 的链接答案:

除非 CPU 相似,否则二进制文件可能会有所不同(即使那样,也有可能)

正如 Oliv 所说,objdump 也是比较差异的好方法。

【讨论】:

  • 有趣。当我为 ARM 进行交叉编译时,特定于 CPU 的优化问题应该会消失,因为主机 CPU 不应该影响目标的优化,对吧?
猜你喜欢
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多