Hoy vamos a ver como compilar una aplicación de C++ para un procesador ARM desde un ordenador con arquitectura x86 o x64.
Para ello, en primer lugar, debemos instalar las dependencias necesarias.
sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev build-essential bison flex libssl-dev bc
A continuación, instalamos la versión de G++ adecuada a nuestra arquitectura ARM. Una de las mayores complicaciones es la designación de los procesadores ARM, que condiciona las dependencias necesarias.
En caso de dudas, esta entrada puede seros de ayuda. Pero, en resumen, los procesadores ARMv7 y anteriores son de 32 bits, mientras que los ARMv8 y posteriores son de 64 bits (compatibles con 32 bits).
Por otro lado, existen cross compilers para operaciones de coma flotante ejecutadas por software (como gnueabi) y operaciones de coma flotante implementadas en hardware (como gnueabihf). Si es posible usar el segundo, es preferido frente al primero.
Así que, en función del tipo de procesador que tengamos hacemos lo siguiente,
Para ARM 32bits
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
Para ARM 64bits
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
Ahora, para probar, vamos a crear un simple programa “hola mundo”. Para ello, creamos un fichero ‘main.cpp’ con el siguiente contenido.
int main(int argc, char *argv[]) {
cout << "Hola mundo!" << endl;
return 0;
}
Para compilarlo, ejecutamos el siguiente comando.
Para ARM 32bits
arm-linux-gnueabihf-g++ main.cpp -o hello
Para ARM 64bits
aarch64-linux-gnu-gcc main.cpp -o hello
Movemos el fichero ‘hello’ a nuestra máquina objetivo, y cambiamos los permisos de ejecución (por ejemplo, a 777).
Ejecutamos nuestro programa de prueba con el siguiente comando.
./hello
Si todo ha salido correctamente, deberíamos ver nuestro mensaje de “Hola mundo!” en la consola de comandos.