Compilando con GCC


¿Se han dado cuenta que siempre al compilar lo hacemos en un solo paso? Yo sé que el proceso de compilación esta dividido en varias partes porque así me lo dijeron en la escuela, pero la verdad siempre, como todas las cosas suelo olvidarlo.

Ya hace un tiempo vi a Rommel explicar las estas etapas con GCC, la verdad no me lo aprendí pero creo que es importante tener la referencia de las etapas de este proceso para saber que es lo que realmente esta pasando, así que me di a la tarea de leer el manual de GCC (incluso el man se me hizo gigante) y escribirlas aquí de forma somera:

Preprocesado. Lo que pasa aquí básicamente aquí es sustituir todos los valores implícitos con su valor real, es decir, las variables que usan #define son sustituidas por su valor real y el contenido de los #include es agregado al código fuente.

$gcc -E hola.c > hola.pp

Revisen el contenido de hola.pp

Compilado. Lo que verán es que se creo hola.s y su contenido será el programa en ensamblador.

$gcc -S hola.c

Ensamblado. Lo que pasa ahora es la creación de un código objeto, en este caso hola.o Aquí si ven el contenido de este fichero será código Hexadecimal, si usan strings verán las cadenas de texto que aun se distinguen en el fichero, pero lo importante es usar file para que noten el tipo de archivo que generó gcc.

$gcc -c hola.c

Enlazado. Este punto no tiene mucho sentido si no hay varios archivos de código objeto. Lo que pasa es que relaciona o reúne todos los códigos que ya tenemos compilados con los anteriormente existentes en el sistema, básicamente con el de las bibliotecas que hemos usado.

$gcc -o hola hola.o

Otras cosas importantes que descubrí es que en el ensamblado GCC usa AS y el enlazado corre por parte de LD. Para finalizar creo que la opción -v de GCC también puede ayudar para observar el proceso de la compilación. Espero que a alguien le sirva para recordar o bien, para aprender un poco sobre este proceso.

P.D:  Dedicado a quien no supo que contestar cuando le preguntaron ¿Cómo se compila un programa en Linux?

2 Respuestas a “Compilando con GCC

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