C++コンパイラを使用してプロジェクトをビルドすると、ソースコードに変更がなければ、生成されたバイナリが影響を受けないことを確認できますか?私のソースを再コンパイルするたびに、バイナリのmd5チェックサムが影響を受けるように見えます。コンパイル時に何らかの形で生成されたバイナリに影響がありますか?どのようにして再現可能なコンパイル結果を生成できますか?反復可能なオブジェクトコードの生成C++
答えて
make
のような増分ビルドシステムを使用して、ソースが変更されない場合にコードを再コンパイルしないようにします。
コンパイラが同じソースから同じバイナリを作成する可能性があります。コンパイラによって異なりますが、コンパイラによって異なります。ほとんどの場合、現在の時刻が生成されたバイナリのどこかに埋め込まれます。
インクリメンタルビルドは、オブジェクトファイルに追加データを追加することがあります。代わりに、毎回ゼロからビルドする非インクリメンタルビルドを使用することができます。このMSの記事をチェックしてください:http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx – tguclu
@tgucluそれは私のものよりもインクリメンタルな意味です。私の定義では、インクリメンタルビルドシステムは出力オブジェクトに違いはありません。ソースが変更された場合にのみ再構築されます。 –
あなたのツールチェーンとOSに大きく依存すると思われます。たとえば、実行可能なヘッダーの1つにタイムスタンプが含まれている場合、結果のMD5が異なることが常にわかります。
あなたが達成しようとしている最終的な結果は何ですか?(つまり、なぜ同じであることが重要なのですか)..
一つは、バイナリを逆アセンブルし、MacOSXの
otool -tV a.out | md5
ee2e724434a89fce96aa6b48621f7220
に出力に
例をMD5を実行します。しかし、1はグローバルデータ上にミス...(あまりにも含めるためのパラメータであるかもしれない)ことができます
私はあなたのソースを管理する方法...バイナリをチェックし、MD5の問題に答えると、他の人がについて書いてきたようにシステムを構築していますまた、
を見てのことですVisual Studio用のmd5チェックサムの比較はできません。 Visual Studioの通常のリリースバージョンの.exeファイルには、再コンパイルごとに3つの場所が変更されます。 2つはタイムスタンプで、3つ目はVisual Studioが.exeのバージョンをヘルパーファイルと照合して同期していることを確認するために使用する一意のGUIDです。
3つの変更フィールドをゼロにするツールを書くことは可能かもしれませんが、ファイルを解析するのは簡単ではありません。
また、任意の.dllを呼び出している場合は、私が正しいと思い出すと、生成されたファイルに一意の識別子が追加されます。
デバッグバージョンは別の話です。私は多くの、より多くの違いがあると思います。
- 1. は、反復可能なエラー
- 2. のIntelliJ IDEA - 反復可能
- 3. トランスクリプトの反復可能なエミュレーション
- 4. Visual Basicの反復可能なテキストボックス
- 5. 春の反復可能なフィールドタグmvc
- 6. 再帰的な反復可能なテンプレート関数C++
- 7. 反復可能な範囲で反復する
- 8. ドロップダウン反復可能なフィールドのPHP配列の作成
- 9. 反復可能なコンテンツセクションの作成方法
- 10. Java 8反復可能アノテーション
- 11. 「numpy.float64」オブジェクトが反復可能
- 12. 反復可能なツリーを平滑化
- 13. Webglタイル可能な非反復テクスチャ
- 14. 引数は 'NoneType' 反復可能なパンダ
- 15. C#Regex - 反復可能なグループから値を取得する
- 16. C++で反復可能な優先度キューを実装する
- 17. データセットの異なる反復の生成
- 18. Scalaの地図反復可能
- 19. C++可変テンプレート引数の反復
- 20. Python: "'Nonetype'は反復処理なしで反復不可能です
- 21. BOOST_FOREACHを使用してC++クラスを反復可能にする
- 22. この反復可能な実装はなぜスタックオーバーフローを生成するのですか?
- 23. 異なるマシン上で同じC#ソースコードから反復可能なビルド
- 24. 'MyModel'オブジェクトは反復不可能です
- 25. Djangoモジュールオブジェクトは反復不可能です
- 26. 'タイムスタンプ'オブジェクトは反復不可能です
- 27. 可能性:EC2プロビジョニングと反復
- 28. 機能反復不可:Kaggleフォーク
- 29. フラスコ引数は反復可能
- 30. request.filesを作成する方法JSON反復可能
多分、md5バイナリとは別のバージョンを追跡するのに良い方法でしょうか? –
これは何のために必要ですか? – jalf