¿Qué es la compilación cruzada?

written by uve 24 February 2011

Estos días estoy trabajando bastante con el tema, y voy a explicar brevemente qué es y por qué se utiliza la compilación cruzada. Por lo general, los programadores, estamos acostumbrados a compilar para la arquitectura sobre la que se ejecutará el binario. Es decir, programamos en la misma máquina en la que se ejecutará la aplicación. Esto no siempre es posible.

La compilación cruzada o cross-compiling consiste, por tanto, en generar binarios para una arquitectura distinta a la que estamos utilizando para compilar. Por ejemplo, generar un ejecutable para un procesador ARM desde una arquitectura IA-32 o AMD64.

Pero lo realmente interesante es, ¿por qué es necesaria la compilación cruzada? Lo lógico es pensar que si necesitamos compilar para ARM, nos vamos a una arquitectura ARM y compilamos. Esto es complicado, o incluso imposible, en dispositivos empotrados. Imagina un router, con 5MB de almacenamiento, un procesador a 400MHz y 128KB de memoria, ¡¡no cabe ni el compilador!! Aquí, la única opción disponible es la compilación cruzada: se compila en un PC normal, y mediante SSH se copia al router y se ejecuta.

Antes de continuar con el tema, creo que es conveniente explicar lo que es un toolchain o cadena de herramientas. Un toolchain se suele componer de un compilador, utilidades para el manejo de ficheros binarios (ensamblador, enlazador, ...) y un depurador. Se denomina cadena porque se suelen aplicar estas herramientas en ese orden, como una cadena.

En el mundo Linux, y Open Source en general, la toolchain más utilizada es la GNU. Además, esta toolchain es muy completa: make, gcc, binutils, bison, m4, gdb, autotools, ...

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.