Como cruzar a compilação para o ARM?


41

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)?

Respostas:


44

Instale gcc-arm-linux-gnueabie binutils-arm-linux-gnueabiempacote e use apenas ao arm-linux-gnueabi-gccinvés de gccpara compilação.

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

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

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


No Ubuntu 13.10, você obtém o gcc-4.7 para 'gnueabi' e o gcc-4.8 para 'gnueabihf'.
Nobar

quando tentei compilar, openssl/ossl_typ.hnão encontrei erro, embora já tenha instalado libssl-dev.
Necktwi

1
Se você obtiver o código-fonte apt-get source, depois apt-get build-deppoderá normalmente compilar com. dpkg-buildpackage -b -uc -us -rExiste uma maneira de criar um .deb facilmente para o ARM sem alterar o makefile?
Jonathan

@Maratyszcza, você poderia ser mais específico em relação à execução da linha and then just use arm-linux-gnueabi-gcc instead of gcc for compilation? Ao compilar, uso uma chamada para a makequal o AFAIK aponta naturalmente /usr/lib/gccou algo próximo a isso. Como eu poderia chamar arm-linux-gnueabi-gcc diretamente?
Momergil 26/11/2015

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

1

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: https://github.com/raspberrypi/tools e podem ser usados ​​conforme explicado em: https://raspberrypi.stackexchange.com/questions/64273/installing-raspberry- pi-cross-compilador / 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

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

Minha alternativa favorita é criar sua própria imagem com o Buildroot: https://stackoverflow.com/questions/47557262/how-to-download-the-torvalds-linux-kernel-master-recompile-it-and-boot-it- wi / 49349237 # 49349237 Isso cria tudo da fonte e garante que tudo seja compatível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.