GNU Compiler Collection
El GNU Compiler Collection (colección de compiladores GNU) es un conjunto de compiladores creados por el proyecto GNU. GCC es software libre y lo distribuye la Free Software Foundation (FSF) bajo la licencia general pública GPL.
Estos compiladores se consideran estándar para los sistemas operativos derivados de UNIX, de código abierto y también de propietarios, como Mac OS X. GCC requiere el conjunto de aplicaciones conocido como binutils para realizar tareas como identificar archivos objeto u obtener su tamaño para copiarlos, traducirlos o crear listas, enlazarlos, o quitarles símbolos innecesarios.
Originalmente GCC significaba GNU C Compiler (compilador GNU de C), porque solo compilaba el lenguaje C. Posteriormente se extendió para compilar C++, Fortran, Ada y otros.
GCC compila un programa C/C++ en un ejecutable en 4 pasos como se muestra en el siguiente diagrama.
Por ejemplo, un «gcc -o hello.exe hello.c» se realiza de la siguiente manera:
Preprocesamiento: a través del preprocesador GNU C (cpp.exe), que incluye las cabeceras #include y expande las macros #define. El archivo intermedio resultante hello.i contiene el código fuente expandido.
cpp hello.c > hello.i
Compilación: el compilador compila el código fuente preprocesado en código ensamblador para un procesador específico. La opción -S especifica producir código ensamblador, en lugar de código objeto. El archivo de ensamblaje resultante es hello.s.
gcc -S hello.i
Ensamblado: el ensamblador (as.exe) convierte el código ensamblador en código máquina en el fichero objeto hello.o.
as -o hello.o hello.s
Enlazador: finalmente, el enlazador (ld.exe) enlaza el código objeto con el código de la biblioteca para producir un archivo ejecutable hello.exe.
ld -o hello.exe hello.o ...libraries...
El proceso de compilación un programa Arduino involucra varios pasos:
-
Preprocesamiento: En esta fase, el preprocesador de C/C++ maneja las directivas de preprocesamiento, como
#includey#define. Los archivos.inode Arduino son concatenados en un solo archivo.cppy se añade automáticamente#include <Arduino.h>al principio del archivo. -
Compilación: En esta etapa, el código preprocesado es compilado en código de máquina por el compilador de C/C++ (GCC para Arduino). Esto produce un archivo de objeto para cada archivo de código fuente.
-
Ensamblado: Los archivos de ensamblador (
.S), si existen, son convertidos en código de máquina para producir archivos de objeto adicionales. -
Enlazado: Todos los archivos de objeto se enlazan juntos para formar un solo archivo ejecutable. Esto incluye la concatenación de las distintas secciones de código y datos, así como la resolución de las referencias a funciones y variables.
-
Creación del archivo binario: Finalmente, se crea un archivo binario a partir del archivo ejecutable. Este archivo binario es lo que se carga en la placa Arduino.
Cada uno de estos pasos es controlado por el IDE de Arduino, que configura y llama a las herramientas de compilación apropiadas en el orden correcto.