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
#include
y#define
. Los archivos.ino
de Arduino son concatenados en un solo archivo.cpp
y 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.