GCC | Compilador C y C++ | GNU/Linux
Importantes características de GCC
Lo primero de todo, GCC es un compilador portable; se ejecuta en la mayoría de las plataformas disponibles hoy, y puede producir salidas para muchos tipos de procesadores. Además de procesadores usados en ordenadores personales, también soporta microcontroladores, DSPs y CPUs de 64 bits.
GCC no es solo un compilador nativo; también puede compilar cruzado cualquier programa, produciendo ficheros ejecutables para un sistema diferente desde el que GCC está siendo usado. Esto permite compilar software para sistemas embebidos que no son capaces de ejecutar un compilador. GCC está escrito en C con un fuerte enfoque hacia la portabilidad, y puede compilarse a sí mismo, así puede ser adaptado a nuevos sistemas fácilmente.
GCC tiene múltiples frontends, para parsear diferentes lenguajes. Los programas en cada lenguaje pueden ser compilados, o compilados de manera cruzada, para cualquier arquitectura. Por ejemplo, un programa en ADA puede ser compilado para un microcontrolador, o un programa en C para un supercomputador.
GCC tiene un diseño modular, permitiendo que el soporte para nuevos lenguajes y arquitecturas sea añadido. Añadir un nuevo front-end a GCC habilita el uso de este lenguaje en cualquier arquitectura y proporciona que estén disponibles facilidades (tales como librerías) en tiempo de ejecución. De manera similar, si se añade soporte para una nueva arquitectura éste se vuelve disponible para todos los lenguajes.
Finalmente, y de manera más importante, GCC es software libre, distribuido bajo la GNU General Public License (GNU GPL). Esto significa que se tiene la libertad para usar y modificar GCC, como con todo el software de GNU. Si se necesita soporte para un nuevo tipo de CPU, un nuevo lenguaje, o una nueva funcionalidad es posible añadirla uno mismo o contratar a alguien para mejorar GCC de manera personalizada. Se puede contratar a alguien para arreglar un error si esto es importante en el trabajo cotidiano.
Programación en C y C++
C y C++ son lenguajes que permiten acceso directo a la memoria del ordenador. Históricamente, han sido usados para escribir sistemas software de bajo nivel, y aplicaciones dónde el alto rendimiento o el control a través del uso de recursos son críticos. Sin embargo, se requiere de gran cuidado para asegurar que la memoria es accedida de manera correcta, para evitar la corrupción de otras estructuras de datos. Este libro describe técnicas que ayudarán a detectar potenciales errores durante la compilación, pero los riesgos de usar lenguajes como C o C++ nunca pueden ser eliminados.
Además de C y C++ el Proyecto GNU también proporciona otros lenguajes de alto nivel, tales como GNU Common Lisp (gcl), GNU Smalltalk (gst), el GNU Scheme extension language (guile) y el GNU Compiler para Java (gcj). Estos lenguajes no permiten al usuario acceder a memoria directamente, eliminando la posibilidad de errores de acceso a memoria. Son una alternativa segura a C y C++ para muchas aplicaciones.
Opciones más importantes del compilador GCC en su uso:
-c
Realiza solamente el preprocesamiento y la compilación de los ficheros fuentes. No
se lleva a cabo la etapa de enlazado.
-o archivo_salida
especifica el nombre del archivo de salida, resultado de la tarea solicitada al
compilador.
-I path
Especifica el directorio donde se encuentran los archivos a incluir por la directiva
#include. Se puede utilizar esta opción varias veces para especificar distintos directorios
(carpetas).
-L path
Especifica al enlazador el directorio donde se encuentran los archivos de biblioteca
que se habrán de incluir en la compilación. Se puede utilizar la opción -L varias veces
para especificar distintos directorios de biblioteca.
Opciones de aviso más importantes del compilador GCC en su uso
-Wall
Activa todos los avisos más comunes
-W all
Muestra todos los mensajes de advertencia del compilador.
-g
Incluye en el ejecutable la información necesaria para poder trazarlo
empleando un depurador.
-v
Muestra con detalle en stderr las órdenes ejecutadas por gcc.
Compilando un pequeño programa C
El clásico programa de ejemplo para el lenguaje C es Hola Mundo. Aquí está el código fuente para nuestra versión del programa:
#include <stdio.h>
int
main (void)
{
printf ("¡Hola, mundo!\n");
return 0;
}
Se asume que el código fuente está almacenado en un fichero llamado ‘hola.es.c’. Para compilar el fichero ‘hola.es.c’ con gcc, se puede usar el siguiente comando:
$ gcc -Wall hola.es.c -o hola
Esto compila el código fuente de ‘hola.es.c’ a código máquina y lo almacena en el fichero ejecutable ‘hola’. El fichero de salida para el código máquina se especifica usando la opción ‘-o’. Esta opción normalmente es el último argumento en la línea de comandos. Si se omite, la salida es escrita a un fichero por defecto llamado ‘a.out’.
Nótese que si ya existe un fichero con el mismo nombre que el fichero ejecutable en el directorio actual, entonces se sobreescribirá.
La opción ‘-Wall’ activa todos los avisos más comunes —¡se recomienda usar siempre esta opción!. Hay muchas otras opciones de avisos que serán discutidas en capítulos posteriores, pero ‘-Wall’ es la más importante. GCC no producirá avisos a menos que estén activados. Los avisos del compilador son una ayuda esencial detectando problemas al programar en C y C++.
En este caso, el compilador no produce avisos con la opción ‘-Wall’, debido a que el programa es completamente válido. El código fuente que no produce avisos se dice que compila limpiamente.
Para ejecutar el programa, escribe la ruta del ejecutable así:
$ ./hola
¡Hola, mundo!
Esto carga el fichero ejecutable en memoria y hace que la CPU empiece a ejecutar las instrucciones que contiene. La ruta ./ se refiere al directorio actual, así ./hola carga y ejecuta el fichero ejecutable ‘hola’ localizado en el directorio actual.
Fuentes:
Página principal de GCC: https://gcc.gnu.org/
Manuales GCC oficiales: https://gcc.gnu.org/onlinedocs/
Manual en español de Daviddam: https://www.davidam.com/docu/gccintro.es.html?fbclid=IwAR0SvALYK6zKpnNZQCNmhVBq9e_N2GuRb-sBVKWuC_0T4IIPPUoJI4Uh-7I#Introducci_00f3n
Tutorial de compilación básica en GNU/Linux: https://es.wikihow.com/compilar-un-programa-en-C-usando-el-compilador-GNU-(GCC)
Manual sobre GCC en español: https://www.it.uc3m.es/pbasanta/asng/course_notes/ch13.html
Comentarios
Publicar un comentario