私は非常に規制された環境で働いており、製品を構築するたびに同じバイナリ入力を生成して同じソースコードを提供できる必要があります。現在、ビルドごとに変更される結果のバイナリに日付/時刻などを書き込まないようにパッチが適用された古いバージョンのg ++を使用していますが、g++4.7.2に更新したいと思います。誰かがパッチを知っているか、または2つの同一のソースコードを取得して同一のバイナリ出力を生成するために何を探す必要があるかについての提案がありますか?
質問する
5585 次
3 に答える
16
Debian Reproducible buildsプロジェクトは、Debianパッケージをバイトごとに標準化しようとし、2016年にLinuxFoundationの助成金を受け取りました。
これにはコンパイル以上のものが含まれる場合がありますが、それを確認する必要があります。
また、@ Employedが言ったことに次の点を追加する、この記事を指摘しました。
- ソースを固定フォルダ(例
/tmp/build
)に入れて処理します__FILE__
- 、、:
__DATE__
___TIME__
___TIMESTAMP__
- libfaketime:https ://github.com/wolfcw/libfaketime
- それらのマクロをオーバーライドする
-D
-Wdate-time
または: 、またはが使用されている-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
ない。
BuildrootBR2_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 に答える