Quando costruisco un progetto utilizzando un compilatore C++, posso assicurarmi che il file binario prodotto non sia influenzato se non ci sono state modifiche nel codice sorgente? Sembra che ogni volta che ricompongo la mia fonte, il checksum md5 del file binario sia influenzato. Il tempo di compilazione influenza in qualche modo il binario prodotto? Come posso produrre risultati di compilazione ripetibili?Generazione ripetibile di codice oggetto C++
risposta
Utilizzare un sistema di generazione incrementale, ad esempio make
, per assicurarsi di non ricompilare il codice se la sorgente non cambia.
Potrebbe essere possibile ottenere la compilazione per creare binari identici dalla stessa origine, oppure potrebbe non farlo, dipende dal compilatore. La maggior parte incorporerà l'ora corrente nel binario generato da qualche parte.
possono aggiungere dati aggiuntivi ai file oggetto che creeranno differenze. Invece, potresti voler usare una build non incrementale che costruisci da zero ogni volta. Controlla questo articolo MS: http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx – tguclu
@tguclu Questo è un significato diverso incrementale rispetto al mio. Secondo la mia definizione, un sistema di build incrementale non fa differenza per gli oggetti di output: vengono solo ricostruiti solo se cambiano le loro fonti. –
Sospetto che dipenderà molto dalla tua toolchain e dal sistema operativo. Ad esempio, se una delle intestazioni eseguibili contiene un timestamp, troverai sempre che l'MD5 risultante è diverso.
Qual è il risultato finale che stai cercando di raggiungere (ovvero perché è così importante che siano identici) ..?
Sto cercando risposte principalmente su Visual Studio e Xcode/gcc. Ricostruiamo il nostro prodotto su base giornaliera. Mi piacerebbe scoprire in modo affidabile quali modifiche sono state apportate tra due build. Posso farlo impostando alcuni flag nel compilatore/linker per non utilizzare le informazioni di timestamp quando si generano i binari? – user70336
Non per quanto ne so. – Sean
Si può smontare i binari ed eseguire md5 sull'uscita
Esempio su MacOSX
otool -tV a.out | md5
ee2e724434a89fce96aa6b48621f7220
Ma, uno manca fuori sulla dati globali ... (potrebbe essere un parametro per includere anche)
sto rispondendo sul problema del md5 controllare un binario ... come gestire le vostre fonti e sistema di compilazione come altri hanno scritto su è anche una cosa da guardare
Non è possibile eseguire un confronto di checksum md5 per Visual Studio. Per un normale file di versione .exe di Visual Studio ci saranno 3 posizioni che cambiano ad ogni ricompilazione. 2 di questi sono timestamp e il terzo è un GUID univoco che Visual Studio utilizza per abbinare le versioni di .exe con i file helper per garantire che siano sincronizzati.
Potrebbe essere possibile scrivere uno strumento che azzeri i 3 campi di modifica, ma non sono sicuro di quanto sarebbe facile analizzare il file.
Inoltre, se si sta chiamando qualsiasi .dlls, se richiamo correttamente, si ottengono più identificatori univoci nel file generato.
La versione di debug è un'altra storia. Penso che ci siano molte, molte più differenze.
- 1. WSDL generazione generazione ripetibile
- 2. Strumento di generazione codice C#
- 3. Generazione codice MATLAB C++
- 4. Generazione codice C++
- 5. Generazione codice C++ con Python
- 6. C/C++ Espansione macro e generazione codice
- 7. Generazione codice C# in .NET 4
- 8. Generazione di codice in Clojure
- 9. Generazione automatica di diagrammi di flusso dal codice C++
- 10. Generazione del codice F #
- 11. "Lettura ripetibile" vs Ottimista
- 12. Generazione codice Java
- 13. Generazione codice in Maven
- 14. jQuery .css Sfondo non ripetibile
- 15. C# - composizione oggetto - Rimozione Codice Boilerplate
- 16. Eventuali raccomandazioni per la generazione del codice ORM Sqlite C#
- 17. La generazione del codice C++ in ANTLR 3.2 è pronta?
- 18. Ordinamento casuale stabile/ripetibile (MySQL, Rails)
- 19. Progetti C++ di ultima generazione
- 20. Generazione codice: Modelli controller personalizzati
- 21. std :: vector a java.util.Vector generazione di codice con sorso
- 22. Subversion - gestione della generazione di codice
- 23. Generazione di un codice QR in rotaie
- 24. Generazione di codice per iOS e Android
- 25. Generazione di codice statico utilizzando l'API LLVM
- 26. D Generazione codice CTFE e GPU
- 27. Jenkins Plugin Dev ripetibile Errore proprietà
- 28. Generazione di codice in fase di compilazione tramite script
- 29. studio visivo nel codice Generazione bloccato
- 30. Generazione codice Java (Metaprogramming, Reflection, wtv)
Forse quello che ti serve è un modo migliore per tenere traccia delle versioni oltre a md5 il binario? –
Per cosa ti serve? Le build incrementali – jalf