私は、同じバイナリ入力を生成できるようにする必要がある、非常に規制された環境で作業し、製品をビルドするたびに同じソースコードを与えます。現在g ++の古代版を使用していますが、ビルドからビルドに変更されるバイナリの日付/時刻などは書き込まれないようにパッチが適用されていますが、g ++ 4.7.2に更新したいと考えています。誰かがパッチを知っているのですか、または2つの同一のソースコードを取り、同じバイナリ出力を生成するために私が探す必要があることについての提案をしていますか?g ++で確定的なバイナリ出力を生成する方法は?
11
A
答えて
6
また、ビット同一の再構築に依存し、gcc-4.7.xを使用しています。
PWD=/proc/self/cwd
を設定し、-frandom-seed=<input-file-name>
を使用するほかに、svn://gcc.gnu.org/svn/gcc/branches/google/gcc-4_7
ブランチにあるいくつかのパッチがあります。
5
Debian Reproducible builds projectは、Debianパッケージをバイトごとに標準化しようとしており、最近ではLinux Foundation grantとなっています。
これにはコンパイル以外のものが含まれる場合がありますが、それを見てください。
また@Employedが言ったことに、以下の点を追加した、this articleに私を指摘:
- が
__DATE__
ため__FILE__
- に対処するために一定のフォルダ(例:
/tmp/build
)にソースを入れ、__TIME__
、__TIMESTAMP__
:- libfaketime:https://github.com/wolfcw/libfaketime
- オーバーライドトンホースマクロ
-D
-Wdate-time
または-Werror=date-time
:__TIME__
,__DATE__
または__TIMESTAMP__
のいずれかを使用すると警告または失敗します。 Linuxカーネル4.4では、デフォルトでこれが使用されています。ar
と
- 使用
D
旗を、またはスタンプ -fno-guess-branch-probability
を拭くためにhttps://github.com/nh2/ar-timestamp-wiper/tree/masterを使用します。older manual versionsは、それが非決定論が、not anymoreの源であると言います。これが-frandom-seed
でカバーされているかどうかは不明です。
Buildrootは、パッケージレベルでいくつかのアイデアを与える可能性がありBR2_REPRODUCIBLE
オプションを持っていますが、それはこの時点ではこれまで完全からです。
関連スレッド:
関連する問題
- 1. XGBoostライブラリなしでXGBoost出力を生成する方法は?
- 2. (Shiny R)UIで複数の出力を動的に生成する方法は?
- 3. 正確な出力方法
- 4. 必要な確率で乱数を生成する方法は?
- 5. Pigで一意の(ランダムな)出力パスを生成する方法は?
- 6. 特定の出力を生成するGradleタスクの検索方法は?
- 7. asp.netで動力学的にテキストボックスを生成する方法
- 8. ClojureとClojureScript REPLは異なる出力を生成します
- 9. ScrapyからカスタムJSON出力を生成する方法は?
- 10. Nexys ddr 4でオーディオサウンド出力を生成する方法FPGA
- 11. 確定的なJackson ObjectMapperの作成方法は?
- 12. JSON出力の作成中に値を確認する方法
- 13. index.html-魅力的なレポート作成 - テストメンバ - セレンのwebdriverを生成する方法
- 14. ファイル内のdbgバイナリ出力を読み取る方法は?
- 15. tf.train.batchの出力が確定的でない
- 16. 別のバイナリでバイナリを定義する方法は?
- 17. 出力ストリームで作成されたバイナリ出力ファイルの内容
- 18. Railsのデバッグ方法は!バイナリ値だけを出力します
- 19. PHPで出力を生成する最良の方法はどれですか?
- 20. C++でHTML出力を生成する最良の方法は何ですか?
- 21. unix差分ユーティリティ - < or >なしで出力ファイルを生成する方法?
- 22. Pythonで特定の確率で乱数を生成する方法は?
- 23. MATLABの確率的ニューラルネットワークによる出力を検証する方法は?
- 24. g ++でint i = iのエラー/警告を生成する方法は?
- 25. g ++でデバッグシンボルが生成されない
- 26. 確率の確率でJavaを生成する方法
- 27. なぜオクターブ出力$ gを行い= [...] $
- 28. レポート出力を生成する最良の方法C#
- 29. Mondrian出力からJSONファイルを生成する方法
- 30. 出力でユーザー値を使用して矩形を生成する方法は?
PWD =/procの/セルフ/ CWDは何をしますか? –
@StevenBehnkeデバッグ情報を使ってビルドします。 Linuxでは、GCCは 'PWD'(シェルが現在の作業ディレクトリに設定する)を現在のコンパイルディレクトリとして記録します。ビルドがどのディレクトリで実行されたかにかかわらず、ビルドをビット同一にしたいので、PWDを予測可能な値に設定します。 –
GCCのランダム性の主な用途は何ですか? –