Compilação Cruzada em C – Parte 2
No primeiro artigo, definimos o que seria compilação cruzada, e criamos nosso primeiro exemplo de compilação. Gerando binário de 32bits em máquina 64bits.
Neste segundo artigo, iremos dar continuação.
Agora apresentando como compilar em um sistema operaciona x64 para arm.
Pré requisitos
Instale os seguintes pacotes
sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi
sudo apt install libncurses5-dev build-essential bison flex libssl-dev bc
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
Pré requisitos de instalação
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi
Estes pacotes irão instalar as dependencias do ARM nesta plataforma.
Eles irão criar duas pastas arm-linux-gnueabi e
arm-linux-gnueabihf , ambas com pastas lib para inclusão de respectivas bibliotecas.
Git do projeto
https://github.com/marcelomaurin/croxcompile
Usaremos o git do projeto anterior, agora com uma nova diretiva.
Exemplo
Não apresentarei o fonte em C, pois já foi feito no artivo anterior, me atendo realmente o que foi adicionado neste artigo.
Makefile
PROGRAMA=HELLO
PROGRAMA32=HELLO32
PROGRAMAARM=HELLOARM
CC=gcc
CCARM=arm-linux-gnueabi-gcc
SOURCE= crox.c
all32: clean compile32
all: clean compile
clean:
rm -f *.o
rm -f $(PROGRAMA)
compile32:
$(CC) -m32 $(SOURCE) -o $(PROGRAMA32)
compile:
$(CC) $(SOURCE) -o $(PROGRAMA)
compileARM:
$(CCARM) $(SOURCE) -o $(PROGRAMAARM)
Podemos ver que adicionamos, a diretiva compileARM, onde chamamos o CCARM, que tem valor arm-linux-gnueabi-gcc
A outra diferença é o target de execução, que chamamos de programaarm, para diferenciar dos demais binários.
Podemos compilar o programa, chamando a seguinte rotina:
make compileARM
compilação do programa
Rodando o programa
Agora iremos demonstrar a efetividade do binário, executando o mesmo em um raspberry pi. Que é uma máquina ARM, rodando linux.
Para tanto copiaremos o binário e colocaremos na maquina alvo.
Para esse feito usarei o bitviser.
Agora iremos dár as permissões na máquina.
Por fim, executaremos o binário, e veremos seu resultado.
Conclusão
Podemos aproveitar o poder de processamento e velocidade dos desktop e gerar binários nativos para mais de um tipo de equipamento.
No próximo post irei apresentar como fazer isso no android.
Referências
https://www.acmesystems.it/arm9_toolchain