我在一个非常规范的环境中工作,我们需要能够生成相同的二进制输入,每次构建产品时提供相同的源代码。我们目前使用的是一个古老版本的 g++,该版本已被修补,不会在生成的二进制文件中写入日期/时间之类的东西,这些二进制文件会随着构建而改变,但我想更新到 g++ 4.7.2。有谁知道补丁,或者对我需要寻找什么来获取两个相同的源代码并产生相同的二进制输出有什么建议?
问问题
5585 次
3 回答
16
Debian Reproducible 构建项目试图逐字节标准化 Debian 软件包,并于 2016 年获得了 Linux 基金会的资助。
虽然这可能不仅仅包括编译,但您应该看看它。
它还向我指出了这篇文章,它在@Employed 所说的内容中添加了以下几点:
- 把源码放在一个固定的文件夹里(例如
/tmp/build
)来处理__FILE__
- 对于
__DATE__
,__TIME__
,__TIMESTAMP__
:- libfaketime:https ://github.com/wolfcw/libfaketime
- 覆盖这些宏
-D
-Wdate-time
or : 如果使用, or are 则-Werror=date-time
警告或失败。Linux 内核 4.4 默认使用它。__TIME__
__DATE__
__TIMESTAMP__
- 将
D
标志与 一起使用ar
,或使用https://github.com/nh2/ar-timestamp-wiper/tree/master擦除图章 -fno-guess-branch-probability
:旧的手册版本说它是不确定性的来源,但现在不是了。不确定这是否被覆盖-frandom-seed
。
Buildroot有一个BR2_REPRODUCIBLE
选项可以提供一些关于包级别的想法,但目前还远未完成。
相关话题:
于 2015-06-24T06:36:52.247 回答
8
我们还依赖位相同的重建,并且使用 gcc-4.7.x。
除了设置PWD=/proc/self/cwd
和使用之外-frandom-seed=<input-file-name>
,还有一些补丁,可以在svn://gcc.gnu.org/svn/gcc/branches/google/gcc-4_7
分支中找到。
于 2013-02-02T02:40:40.460 回答
-1
使用“ DATE ”宏使构建不确定
于 2018-06-20T02:19:02.087 回答