Opciones útiles del Compilador

El compilador GCC tiene cientos de opciones. Muchas de ellas son irrelevantes para el uso típico, otras son irrelevantes para arquitecturas PPC. En este capítulo presentamos un conjunto de opciones usadas cuando compilamos programas MorphOS. Para una descripción detallada de todas las opciones lee el manual de GCC.

Compilando y Enlazando

En cada proyecto que consista de mas un código fuente, el proceso de construir el ejecutable es dividido en dos etapas: Compilar y enlazar. Para proyectos de un solo fuente, estas dos etapas se hacen en una.

Ambas etapas tienen diferentes opciones. Algunas opciones son solo relevantes en la compilación, otras solo en el enlazado, y otras lo son en ambos procesos. Afortunadamente el nombre de las opciones nunca se solapan. Lo mas seguro entonces es pasar todas las opciones deseadas en ambas etapas. Las irrelevantes simplemente se ignorarán.

Orden de las Opciones

El orden en que se pasan las opciones a GCC no es generalmente importante. Aunque hay algunas excepciones críticas. Una de ellas es el orden con que se pasan las librerías estáticas al enlazador. Vamos a imaginar que vamos a enlazar dos librerías estáticas libfoo.a libbar.a. Esto requiere que pasemos los parámetros –lfoo -lbar al enlazador. Sin embargo, en el caso donde libbar use funciones de libfoo, la opción -lfoo se debe pasar después de la opción -lbar. De otra manera el enlazador encontrará simbolos sin resolver en libbar.

Opciones de Advertencia

Estas opciones controlan las advertencias mostradas por el compilador en algunas construcciones del lenguaje potencialmente peligrosas. Aunque algunos programadores se quejan de que el compilador es un poco exigente, se recomienda usar cuanto mas de estas opciones. Te pueden ahorrar horas de tiempo perdido en el proceso de depuración…

-Wall, activa todas las advertencias típicas de construcción en el lenguaje potencialmente peligrosas. Algunos ejemplos son usar un valor de asignación como una condición lógica o usar aritmética en punteros void*. Mientras que sintácticamente son legales, estas construcciones pueden ser el resultado de un error al escribir, e incluso cuando se usa intencionadamente, pueden producir errores que pueden ser muy difíciles de depurar. Esta opción es una obligación para cualquier programador razonable.

-Wextra, activa incluso mas advertencias (esta opción es -W en GCC 2.95.3). No hay una razón seria para no usar esta opción junto con -Wall.

Nota: GCC4 tiene una característica irritante. Las cadenas literales son asumidas como arrays de tipo char fijo. Casi todas las funciones del API de MorphOS creen que las cadenas sean del tipo STRPTR que es una definición de tipo unsigned char*. Pasar literales a estas funciones producen un montón de advertencias. La mejor manera de evitarlo, es explícitamente cambiar mediante cast cada literal pasado al API de MorphOS como STRPTR. Una alternativa es suprimir todas las advertencias con -Wno-pointer-sign. La desventaja de esta segunda solución es que también suprimes las advertencias del signo del puntero para todos los tipos enteros, no solo para los char. Otra solución, buena para código nuevo es sobreescribir la definición de STRPTR y tipos derivados. Puede hacerse poniendo el siguiente código antes del fichero de cabecera <exec/types.h>:

typedef char* STRPTR;
typedef const char* CONST_STRPTR;
#define STRPTR_TYPEDEF

Cuando hagas esto, debes estar absolutamente seguro de que no realizas aritmética (asumiendo el signo) en cadenas apuntadas por punteros STRPTR. Si dicha aritmética debe hacerse, los tipos deberían cambiarse a caracter con signo o sin signo explicitamente. Usar esta solución es viejo, código sin inspeccionar puede resultar peligroso.

Opciones de Enlazado

-noixemul, ordena al enlazador que use la librería estática libnix para las funciones C/C++ standard y el código de inicio. Sin este parámetro se usa la librería compartida ixemul.library. Leer mas.

-s, indica al enlazador que elimine la información de depuración y las tablas de símbolos. Esta información no se necesita en el ejecutable final. Eliminarlo provoca que baje el tamaño del ejecutable significativamente.

Opciones de Optimización

-O, donde n es un número entre 0 y 3. El parámetro es un control global del optimizador de la velocidad de ejecución. Números mas altos hacen el optimizador mas agresivo. -O2 es una buena opción para el uso diario. -O3 activa tantas optimizaciones que pueden incrementar significativamente el tamaño del ejecutable. Los buenos programadores optimizan sus algoritmos en primer lugar, las optimizaciones de compilador no pueden arreglar errores de diseño…

-Os, activa optimizaciones en el tamaño del ejecutable, resultando en una velocidad de ejecución mas lenta. No es muy útil en las típicas aplicaciones.

 

Licencia Creative Commons
Opciones de Compilador por Grzegorz Kraszewski se distribuye bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.
Basada en una obra en http://krashan.ppa.pl/mph/useful-compiler-options.

2 Respuestas a “Opciones útiles del Compilador

  1. Gracias tocayo! En el siguiente tocaremos las linked list del exec. Supongo que será mas entretenido. 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s