¿Cuáles son las opciones específicas que necesitaría construir en "modo de lanzamiento" con optimizaciones completas en GCC? Si hay más de una opción, enumere todas. Gracias.¿Cómo construir en modo de lanzamiento con optimizaciones en GCC?
Respuesta
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
no hay 'una talla para todos' - es necesario entender su aplicación, los requisitos y los parámetros de optimización para determinar el subconjunto correcto para su binario.
O la respuesta que desea: -O3
O2 se encenderá todas las optimizaciones que no requieren un espacio de comercio \ a la velocidad y tiende a ser el que veo utiliza con mayor frecuencia. -O3 tiene algo de espacio para compensaciones de velocidad (como función en línea.) -Os hace otras cosas para reducir el tamaño del código. Esto puede hacer que las cosas sean más rápidas que O3 al mejorar el uso de la memoria caché. (pruebe para saber si le funciona). Tenga en cuenta que hay una gran cantidad de opciones que ninguno de los conmutadores O toca. La razón por la que se quedan fuera es porque a menudo depende del tipo de código que está escribiendo o depende de la arquitectura.
Tenga en cuenta que gcc no tiene un "modo de lanzamiento" y un "modo de depuración" como lo hace MSVC. Todo el código es solo código. La presencia de varias opciones de optimización (-O2 y -Os son las únicas por las que generalmente debe preocuparse a menos que esté realizando ajustes muy precisos) modifica el código generado, pero no de una manera que impida la interoperabilidad con otras normas ABI. código. En general, quiere optimización en las cosas que desea lanzar.
La presencia de la opción "-g" causará que los símbolos generados y la información del código fuente se coloquen en los archivos generados, lo cual es útil para la depuración pero aumenta el tamaño del archivo (y revela su código fuente). es algo que a menudo no quieres en binarios "lanzados".
Pero no son exclusivos. Puede tener un código binario compilado con información de optimización y depuración, o uno con ninguno.
Por lo general, la optimización debería deshabilitarse si tiene la intención de depurar el código generado, de lo contrario, encontrará que la depuración es una experiencia similar a una película de David Lynch. – caf
No es tan malo, miro los volcados de pila y la salida valgrind de los binarios de "publicación" todo el tiempo. Siempre y cuando no utilice -fomit-stack-pointer y entienda que la estática puede estar en línea e invisible, puede leer una gran cantidad de contexto, incluso de un binario muy optimizado. Si sus funciones son cortas, generalmente puede averiguar la expresión que se estrelló con una o dos conjeturas. –
A diferencia de una película de David Lynch, sin embargo, los depuradores permiten al espectador alternar a voluntad entre los diferentes niveles de la realidad. Si entiendes el desmontaje, entonces el paso simple a través de eso (con las líneas fuente intercaladas) generalmente tiene cierto sentido incluso con la optimización. Si no comprende el desmontaje, entonces aprenderá. –
Aquí hay una parte de un archivo MAKE que utilizo regularmente (en este ejemplo, está intentando construir un programa llamado foo).
Si lo ejecuta como $ make BUILD=debug
o $ make debug
continuación, se utilizará el depuración CFLAGS. Estos desactivan la optimización (-O0
) e incluyen símbolos de depuración (-g
).
Si omite estas banderas (mediante la ejecución de $ make
sin ningún parámetro adicional), construirá la versión Release CFLAGS donde la optimización está activada (-O2
), símbolos de depuración despojados (-s
) y las afirmaciones desactivan (-DNDEBUG
) .
Como han sugerido otros, puede experimentar con diferentes configuraciones de -O*
dependiendo de sus necesidades específicas.
ifeq ($(BUILD),debug)
# "Debug" build - no optimization, and debugging symbols
CFLAGS += -O0 -g
else
# "Release" build - optimization, and no debug symbols
CFLAGS += -O2 -s -DNDEBUG
endif
all: foo
debug:
make "BUILD=debug"
foo: foo.o
# The rest of the makefile comes here...
- 1. problemas con Console.SetOut en modo de lanzamiento?
- 2. Trace.WriteLine en modo de lanzamiento?
- 3. ¿Cómo depurar en modo de lanzamiento?
- 4. Cómo deshabilito las optimizaciones de tailcall en gcc
- 5. Depuración en .NET en modo de lanzamiento
- 6. Escribir para depurar en modo de lanzamiento
- 7. bucle infinito en modo de lanzamiento
- 8. Debug.Assert aparece en el modo de lanzamiento
- 9. Símbolos de depuración en modo de lanzamiento
- 10. ¿Por qué no puedes construir un sitio web en modo de lanzamiento?
- 11. ¿Cuáles son las costosas optimizaciones de GCC?
- 12. ¿Debug.Assert genera IL en modo de lanzamiento?
- 13. ¿Cómo habilitar la macro TRACE en el modo de lanzamiento?
- 14. comportamiento extraño con optimizaciones habilitadas
- 15. ¿Por qué mi aplicación falla en modo de lanzamiento pero no en modo de depuración?
- 16. ¿Implementar la aplicación en producción usando el modo de depuración en lugar del modo de lanzamiento?
- 17. Embalaje de proyectos NuGet compilados en modo de lanzamiento?
- 18. C++ define un modo de lanzamiento 'mejor' incorporar VS
- 19. No se pueden construir bibliotecas de Boost con GCC
- 20. es assert (false) ignorado en modo de lanzamiento (VC++)?
- 21. Construir un ejecutable Linux usando GCC
- 22. Distinguir el modo de desarrollo y la configuración del entorno del modo de lanzamiento en Android
- 23. depuración vs lanzamiento en CMAKE
- 24. Optimizaciones con pliegues
- 25. ¿Cómo evitar la ventana "program.exe ha dejado de funcionar" en modo de lanzamiento en Windows?
- 26. ¿Cómo evitar la copia de archivos de documentación XML en una compilación en modo de lanzamiento?
- 27. ¿Utiliza el modo C++ 0x de GCC en producción?
- 28. Visual C++: Diferencia entre el inicio con/sin depurar en modo de lanzamiento
- 29. Bloqueo con una aplicación x64 .NET 4.0 en modo de lanzamiento fuera del IDE solamente
- 30. ¿Cómo construir con fluidez JSON en Java?
Hice y no pude encontrar una explicación directa. Sin embargo, podría apestar buscando. – Polaris878
Además, el objetivo de SO es aparecer en los motores de búsqueda como Google, así que es mejor tenerlo aquí de todos modos. – Polaris878
Llamada justa. ¿Esto es lo que estabas buscando? ¿O necesitas un poco más de contexto/información? – Josh