Cuando construyo un proyecto usando un compilador C++, ¿puedo asegurarme de que el binario producido no se vea afectado si no hubo cambios en el código fuente? Parece que cada vez que recompilo mi fuente, la suma de comprobación md5 del binario se ve afectada. ¿El momento de la compilación de alguna manera afecta el binario producido? ¿Cómo puedo producir resultados de compilación que sean repetibles?Generación de código objeto repetible C++
Respuesta
Utilice un sistema de compilación incremental, como make
, para asegurarse de no volver a compilar su código si la fuente no cambia.
Es posible que su compilación haga binarios idénticos de la misma fuente, o no, depende del compilador. La mayoría incrustará la hora actual en el binario generado en alguna parte.
compilaciones incrementales pueden agregar datos adicionales a los archivos de objeto que crearán diferencias. En su lugar, es posible que desee utilizar compilación no incremental, que compila desde cero cada vez. Consulte este artículo de MS: http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx – tguclu
@tguclu Ese es un significado diferente de incremental que el mío. Según mi definición, un sistema de compilación incremental no hace ninguna diferencia en los objetos de salida: solo se reconstruyen si cambian sus fuentes. –
Sospecho que dependerá en gran medida de su cadena de herramientas y sistema operativo. Por ejemplo, si uno de los encabezados ejecutables contiene una marca de tiempo, siempre encontrará que el MD5 resultante es diferente.
¿Cuál es el resultado final que está tratando de lograr (es decir, por qué es tan importante que sean idénticos)?
Estoy buscando respuestas principalmente en Visual Studio y Xcode/gcc. Reconstruimos nuestro producto todos los días. Me gustaría saber de manera confiable qué dlls han cambiado entre dos compilaciones. ¿Puedo hacer esto configurando algunos indicadores en el compilador/enlazador para no usar información de marca de tiempo al generar binarios? – user70336
No tan lejos como sé. – Sean
Uno puede desmontar los binarios y ejecutar MD5 en la salida
Ejemplo de MacOSX
otool -tV a.out | md5
ee2e724434a89fce96aa6b48621f7220
Pero, uno se pierde en los datos globales ... (podría ser un parámetro para incluir también)
estoy respondiendo sobre el problema de la comprobación md5 un binario ... cómo administrar sus fuentes y el sistema construye como otros han escrito acerca es también una cosa que mirar
No se puede hacer una comparación de suma de comprobación md5 para visual studio. Para un archivo .exe de versión de lanzamiento normal de Visual Studio habrá 3 ubicaciones que cambiarán con cada recompilación. 2 de ellos son marcas de tiempo y el tercero es un GUID único que Visual Studio usa para unir versiones de .exe con archivos de ayuda para garantizar que estén sincronizados.
Puede ser posible escribir una herramienta que pondrá a cero los 3 campos cambiantes, pero no estoy seguro de lo fácil que sería analizar el archivo.
Además, si está llamando a cualquier .dlls, si recuerdo bien, obtendrá más identificadores únicos en el archivo generado.
La versión de depuración es una historia diferente. Creo que hay muchas, muchas más diferencias.
- 1. HDF5 C Generación de código
- 2. Herramienta de generación de código C#
- 3. Generación de código C# en .NET 4
- 4. Generación de código C++ con Python
- 5. Generación de código dinámico
- 6. C/C++ Expansión de macro vs. Generación de código
- 7. Xcode generación de código
- 8. Generación de código Java
- 9. generación de código en Clojure
- 10. Generación de código de un formulario C# POCO clase
- 11. generación de código Java JPA
- 12. Generación de código usando .net
- 13. Generación de código con Scala
- 14. Generación de código en Maven
- 15. Integrar generación de código con eclipse C++ compilación
- 16. ¿Está lista la generación de código C++ en ANTLR 3.2?
- 17. Cualquier recomendación para Sqlite C# generación de código ORM
- 18. Generación de código para composición usando Eclipse
- 19. Clasificación aleatoria estable/repetible (MySQL, Rails)
- 20. PHP: PCRE: Cómo sustituir carbón repetible
- 21. ¿Generación de formulario del objeto Esquema Mongoose?
- 22. Generación de perfiles de código PHP
- 23. Generación de código: plantillas de controlador personalizado
- 24. Técnicas de generación de código JIT
- 25. Generación de código Python con pyside-uic
- 26. Generación de código para iOS y Android
- 27. Generación de código QR en ASP.NET MVC
- 28. std :: vector para la generación de código java.util.Vector con trago
- 29. Generación de código de tiempo de compilación en D
- 30. Generación automática de código para el puente de Objective C a C++
Tal vez lo que necesita es una mejor manera de realizar un seguimiento de las versiones aparte de md5 el binario? –
¿Para qué necesita esto? – jalf