¿Cómo cruzar la compilación para ARM?


41

¿Cómo configuro GCC para la compilación cruzada para el procesador ARM? ¿El host estaría en x86_64 (AMD64 - Ubuntu 12.04) y el objetivo sería ARM (Raspberry Pi y Pandaboard - harán compilaciones separadas para cada uno)?

Respuestas:


44

Instalar gcc-arm-linux-gnueabiy binutils-arm-linux-gnueabipaquetes, y luego usar en arm-linux-gnueabi-gcclugar de gcccompilar.

Debe tener cuidado con el sabor de linux y binutils que tiene en su sistema de destino. Lo más nuevo es hardfloat, en este caso harías:

sudo apt-get install gcc-arm-linux-gnueabihf

Esto trae el entorno completo de compilación cruzada, incluidos los binutils.


En Ubuntu 13.10 obtienes gcc-4.7 para 'gnueabi' y gcc-4.8 para 'gnueabihf'.
nobar

cuando intenté compilar openssl/ossl_typ.hno encontré el error, aunque ya lo instalé libssl-dev.
Necktwi

1
Si obtiene el código fuente de apt-get source, después de apt-get build-depque normalmente puede compilar con dpkg-buildpackage -b -uc -us -r¿Hay alguna manera de construir un .deb esto fácilmente para ARM sin cambiar el archivo MAKE?
Jonathan

@Maratyszcza, ¿podría ser más específico con respecto a la ejecución de la línea and then just use arm-linux-gnueabi-gcc instead of gcc for compilation? Cuando compilo, uso una llamada a la makeque, AFAIK, señala naturalmente /usr/lib/gcco algo parecido a eso. ¿Cómo podría llamar a arm-linux-gnueabi-gcc directamente?
Momergil

99
@MomergilCC=arm-linux-gnueabihf-gcc make ...
Maratyszcza

1

El proveedor de imágenes de disco también debe proporcionar un compilador cruzado compatible

Este es el único método confiable.

Para RPI en particular, los compiladores cruzados proporcionados están disponibles en: https://github.com/raspberrypi/tools y se pueden usar como se explica en: https://raspberrypi.stackexchange.com/questions/64273/installing-raspberry- pi-cross-compiler / 83215 # 83215

git clone https://github.com/raspberrypi/tools
export PATH="$(pwd)/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:${PATH}"
printf '#include <stdio.h>\nint main() { puts("hello world"); }\n' > hello_world.c
printf '#include <iostream>\nint main() { std::cout << "hello world" << std::endl; }\n' > hello_world.cpp
arm-linux-gnueabihf-gcc -std=c99 -o hello_world_c hello_world.c
arm-linux-gnueabihf-g++ -std=c++11 -o hello_world_cpp hello_world.cpp

Si elige incorrectamente su propio compilador cruzado, puede ocurrir lo siguiente:

Mi alternativa favorita es construir su propia imagen con Buildroot: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237 # 49349237 Esto crea todo desde la fuente y garantiza que todo sea compatible.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.