Como cruzar compilação para o ARM?

37

Como configuro o GCC para compilação cruzada para o processador ARM? O host estaria em x86_64 (AMD64 - Ubuntu 12.04) e o alvo seria ARM (Raspberry Pi e Pandaboard - farão compilações separadas para cada um)?

    
por haziz 02.02.2013 / 21:00

2 respostas

37

Instale gcc-arm-linux-gnueabi e binutils-arm-linux-gnueabi packages e, em seguida, use apenas arm-linux-gnueabi-gcc em vez de gcc para compilação.

Você precisa ter cuidado com o sabor do linux e binutils que você tem em seu sistema de destino. O material mais novo é hardfloat, nesse caso você faria:

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

Isso traz o ambiente completo de compilação cruzada, incluindo binutils.

    
por Maratyszcza 02.02.2013 / 22:01
0

O provedor de imagem de disco também deve fornecer um compilador cruzado compatível

Este é o único método confiável.

Para o RPI em particular, os compiladores cruzados fornecidos estão disponíveis em: Ссылка e podem ser usados ​​como explicado em: Ссылка

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

Se você escolher seu próprio compilador cruzado incorretamente, o seguinte pode acontecer:

  • o vinculador dinâmico está no caminho errado: Ссылка
  • incompatibilidade binária com o glibc e quaisquer outras bibliotecas vinculadas: Ссылка

Minha alternativa favorita é criar sua própria imagem com o Buildroot: Ссылка Isto constrói tudo desde a fonte e garante que tudo seja compatível.