Programación: el compilador gcc

GNU gcc es una herramienta esencial si vas a comenzar a programar en Linux. De hecho, los ejemplos de código C que mostraré en próximos artículos de esta serie de programación los compilaré todos con gcc. Puedes usar otros compiladores o entornos IDE si lo prefieres, pero yo prefiero usar éste.

Si recuerdas un artículo previo de programación donde hablaba de las etapas, una de ellas era la compilación, es decir, traducir nuestro lenguaje de alto nivel en un binario para que la máquina en la que estamos trabajando lo pueda interpretar. Es decir, pasarlo a un formato binario con una serie de instrucciones y datos que serán almacenados en la memoria y ejecutados por la CPU. Pues bien, de eso se va a encargar gcc…

¿Qué es gcc?

Los compiladores de Unix han sido tan importantes que se han tomado como estándar para la industria del software. Aunque existen varios compiladores, el más famoso en Linux es GNU gcc (Gnu Compiler Collection).  Escrito inicialmente por Richard Stallman y Leonard H. Tower.

Aunque se creó para C, admite también C++, y dispone de front-ends para lenguajes como VHDL, Java, Fortran, Ada, Pascal, Objetive-C, Go, etc. Lo interesante es que el código que genera está bastante bien optimizado, reconoce todos los estándares del lenguaje C y el ANSI C. De hecho, otros IDEs lo usan como compilador base.

Si por algo no te gusta usar el modo texto, puedes contar con IDEs con entornos gráficos basadas en gcc como Anjuta, KDevelop, Qt Creator, Eclipse, etc.

Si no usas ningún IDE, puedes usar cualquier editor de texto para escribir el código que luego compilarás con gcc. Si el editor reconoce la sintaxis del lenguaje que estás usando y resalta el texto, mucho mejor, ya que te ayudará mucho a diferenciarlo y hará la lectura algo más intuitiva para repasarlo. Por ejemplo:

nano hola.c
#include <stdio.h>
int main()
{
printf(“Hola ArchiTecnologia\n”);
return 0;
}

Y luego lo compilarías como ya sabes de ejemplos anteriores de la serie de artículos de programación:

gcc -o hola hola.c

Y ya tendrías el binario para poderlo ejecutar:

./hola

Usos y parámetros básicos

Ya sabes que para más información te recomiendo o leer la documentación GNU gcc o echarle un vistazo al manual:

man gcc

No obstante, aquí te voy a mostrar algunas opciones y parámetros que usarás con mayor frecuencia. Por ejemplo, si vas a usar un estándar específico del lenguaje C, puedes indicarlo con:

#Para el estándar de 1999
gcc -std=c99 -o hola hola.c

#Para el estándar 2011
gcc -std=c11 -o hola hola.c

Por cierto, si usas eso puede compilar más lento, pero mejorará el resultado del binario final. Otra de las cosas importantes, ya sabes que gcc si no le pasas un nombre con la opción -o genera un binario llamado por defecto como a.out:

gcc hola.c
./a.out

Si en vez de generar un binario quieres generar el código ensamblador correspondiente a tu código fuente, puedes usar la opción -S:

gcc -S hola.c
cat hola.s

Ese fichero generado es un ASM pero por defecto lo hace en formato AT&T, si quieres especificar un formato concreto, puedes usar por ejemplo:

gcc -S -masm=att hola.c
gcc -S -masm=Intel hola.c

Puedes obtener un código objeto sin enlazar con -c:

gcc -c hola.c

Si necesitas incluir bibliotecas o ficheros de cabecera (.h), puedes usar -L o -I respectivamente, para indicar las rutas donde se encuentran (en este caso en lib y proyecto/src):

gcc hola.c -Llib -o hola
gcc -Iproyecto/src hola.c -o hola

Para que el compilador optimice el código, aunque eso implique una domora mayor, puedes usar la opción -O o si quieres mayor nivel de optimización -O2, etc., es decir, puedes elegir el nivel de optimización. Por ejemplo:

gcc -O -o hola hola.c
gcc -O2 -o hola hola.c

Si lo que pretendes es optimizar el binario para una microarquitectura de CPU concreta o para una CPU, como por ejemplo AMD Zen, o para una familia concreta, etc., gcc tiene una serie de opciones para especificar esto. Por ejemplo:

#Para una de estas familias o tipos de CPU
gcc -m486 hola.c -o hola
gcc -m386 hola.c -o hola

#Para una CPU concreta (anteriormente -mcpu)
gcc -mtune=k8 hola.c -o hola
gcc -mtune=prescott hola.c -o hola
gcc -mtune=athlon-4 hola.c -o hola

#Para un tipo de FPU o extensiones específicas. Por ejemplo, para SSE
gcc -mfpmath=sse hola.c -o hola

#También puedes combinar opciones, por ejemplo, para un nivel de optimización 3 y para AMD Zen 2
gcc -O3 -march=znver2 hola.c -o hola

En los primeros artículos de la serie de programación comenté cosas básicas sobre teoría, las etapas, etc. Ahora con estos nuevos artículos quiero dejar presentadas las herramientas, y luego ya comenzaremos a aprender lenguaje C como tal. Bueno, realmente tengo pensado algo más que eso, también veremos Bash scripting…

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar