gpt4 book ai didi

c++ - 如何使用 g++ 生成确定性二进制输出?

转载 作者:IT老高 更新时间:2023-10-28 22:38:12 29 4
gpt4 key购买 nike

我在一个非常规范的环境中工作,我们需要能够生成相同的二进制输入,每次构建产品时提供相同的源代码。我们目前使用的是一个古老版本的 g++,该版本已被修补,不会在生成的二进制文件中写入日期/时间之类的东西,这些二进制文件会随着构建而改变,但我想更新到 g++ 4.7.2。有谁知道补丁,或者对我需要寻找什么来获取两个相同的源代码并产生相同的二进制输出有什么建议?

最佳答案

Debian Reproducible builds project尝试逐字节标准化 Debian 软件包,并收到了 Linux Foundation grant in 2016 .

虽然这可能不仅仅包括编译,但您应该看看它。

它还指向 this article ,这在@Employed 所说的内容中添加了以下几点:

  • 把源码放到一个固定的文件夹(如/tmp/build)来处理__FILE__
  • 对于 __DATE____TIME____TIMESTAMP__:
    • libfaketime : https://github.com/wolfcw/libfaketime
    • -D
    • 覆盖这些宏
    • -Wdate-time-Werror=date-time:__TIME____DATE__ 中的任何一个都会发出警告或失败> 或 __TIMESTAMP__ 被使用。 Linux 内核 4.4 默认使用它。
  • D 标志与 ar 一起使用,或使用 https://github.com/nh2/ar-timestamp-wiper/tree/master擦邮票
  • -fno-guess-branch-probability:older manual versions说它是不确定性的来源,但是 not anymore .不确定这是否包含在 -frandom-seed 中。

Buildroot有一个 BR2_REPRODUCIBLE 选项,它可能会提供一些关于包级别的想法,但目前还远未完成。

相关话题:

关于c++ - 如何使用 g++ 生成确定性二进制输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14653874/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com