gcc为不同路径的相同代码库生成的二进制文件的差异

时间:2016-05-18 20:57:10

标签: c++ c gcc

我有一个代码库(C和C ++),编译后会产生具有不同校验和的二进制文件,即使在二进制文件上运行strip后也是如此。

以十六进制方式对二进制文件进行差异处理会产生以下几行:

位置1的二进制文件:

00000170: 0300 0000 474e 5500 7645 15ec 09f5 2b56  ....GNU.vE....+V
00000180: 0679 e9a4 d49d 29e0 7de8 fb5b 0300 0000  .y....).}..[....

位置2的二进制文件:

00000170: 0300 0000 474e 5500 cf2a 4316 2262 679d  ....GNU..*C."bg.
00000180: 5691 b91a 52a8 29d2 45e8 c204 0300 0000  V...R.).E.......

在我看来,这必须是校验和或类似的东西。我怀疑是时间戳,除非我清理然后在同一目录中进行重建,二进制文件将具有相同的校验和。

有谁知道这可能是什么?我想确保我的二进制文件具有相同的校验和,即使在不同的位置构建它们也可以由我的QA组织进行验证。

1 个答案:

答案 0 :(得分:4)

当睡觉紧张的学生说,不同的部分是build-id

您可以避免在链接上传递build-id生成-Wl,--build-id=none部分,也可以使用strip --remove-section=.note.gnu.build-id将其从ELF中删除。