GCC - Herramientas de desarrollo libres

Una de las piedras angulares del desarrollo del software libre ha sido sin duda su compilador de C GCC. Desarrollado por Richard Stallman, su primera versión vio la luz en 1987.

El lenguaje de programación C fue desarrollado por Dennis Ritchie entre 1969 y 1972 con el objetivo de mejorar el desarrollo del sistema Unix. Desde entonces es un lenguaje ampliamente utilizado para propósito general, con un destacado uso en el desarrollo e implementación de sistemas operativos.

C es un lenguaje de programación de propósito general que presenta economía de expresión, flujo de control y estructuras de datos modernas, y un amplio conjunto de operadores. C no es un lenguaje de "muy alto nivel", ni uno "grande", y no está especializado en ningún área particular de aplicación. Pero su ausencia de restricciones y su generalidad lo hacen más conveniente y efectivo para muchas tareas que los lenguajes supuestamente más poderosos
- El lenguaje de programación C (1978 - Brian W.Kernighan y Dennis M.Ritchie)

El nacimiento del proyecto GNU comenzó en 1984 con el objetivo de crear un completo sistema operativo Unix de software libre. Pero para poder desarrollar software era necesario un compilador y en aquel entonces no existía ningún compilador de C de software libre. En 1987 Richard Stallman, el fundador del proyecto GNU, lanzó la primera versión del compilador GCC desarrollado por él. Desde entonces GCC ha sido una de las herramientas más importantes en el desarrollo de software libre.

Con el tiempo GCC ha sido ampliado para soportar otros lenguajes de programación, incluyendo Fortran, Ada, C++, Objective-C, D o Go. Su desarrollo esta guiado por la GCC Steering Committee con la intención de evitar que cualquier individuo, grupo u organización en particular obtenga el control del proyecto.

La última versión de GCC a fecha de escribir este post es la 10.1, lanzada el 7 de mayo de 2020.

Instalación de GCC

Para instalar GCC lo normal es instalar el paquete build-essential que además de GCC nos instalará otras herramientas, algunas necesarias y otras muy útiles en el desarrollo de aplicaciones, como el linkador y el assembler ld y as, y herramientas como objdump, gprof, nm, readelf, strings, strip, etc.

En ramas Debian/Ubuntu/Elementary:

sudo apt install build-essential

Esto nos instala la versión del repositorio. Podemos comprobar la versión que tenemos con gcc --version:

# gcc --version
gcc (Debian 9.3.0-13) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Instalamos la última versión de GCC

Para instalar la última versión, como he comentado la 10.1 en este momento, podemos hacerlo directamente desde los repositorios. De esta forma podemos tener diferentes versiones instaladas:

sudo apt install gcc-10 g++-10

Ahora tenemos que configurar las alternativas de gcc. Con update-alternatives le asociamos una prioridad, siendo la más alta la que tendremos por defecto:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10 --slave /usr/bin/gcov gcov /usr/bin/gcov-10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9 --slave /usr/bin/gcov gcov /usr/bin/gcov-9

De esta forma podemos seleccionar la versión que queremos usar con:

# update-alternatives --config gcc
Existen 2 opciones para la alternativa gcc (que provee /usr/bin/gcc).

Selección Ruta Prioridad Estado
------------------------------------------------------------
* 0 /usr/bin/gcc-10 100 modo automático
1 /usr/bin/gcc-10 100 modo manual
2 /usr/bin/gcc-9 90 modo manual

Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección:

Probamos GCC

Podemos probar nuestro compilador con el clásico programa de bienvenida holamundo.c:

#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[]) 
{ 
    printf("Hola mundo libre!\n"); 
 
    exit (EXIT_SUCCESS); 
} 

Para construir el programa ejecutamos:

gcc -Wall holamundo.c -o holamundo

Con -Wall le indicamos a gcc que nos alerte de los errores más comunes en nuestro código. Es una buena idea usar al menos esta opción de comprobación. Después tenemos el fichero o ficheros con el código y en la opción -o le indicamos el nombre que queremos para el programa resultante.

Construcción del ejecutable

Aunque se suele denominar compilar al proceso de construir un ejecutable, en realidad compilar es solo parte del proceso de la construcción

El proceso de construcción de un ejecutable conlleva los siguientes pasos:

Construir Ejecutable

Aunque como hemos visto gcc realiza por defecto todos los pasos hasta la producción del ejecutable final, es posible indicarle que realice cualquiera de los pasos intermedios, siendo posible revisar cada uno de los ficheros resultantes. Este proceso en detalle lo veremos en un futuro post.

 

Modificado por última vez enDomingo, 12 Septiembre 2021 15:53
(1 Voto)
Etiquetado como :

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.