Compilação Cruzada em C – Parte 2

23 de janeiro de 2022 Off Por Marcelo Martins

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.

http://maurinsoft.com.br/index.php/2022/01/22/compilacao-cruzada-em-c/

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

sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi

Pré requisitos de instalação

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
Execução em máquina x64

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.

Copiando o binário gerado para a máquina alvo

Agora iremos dár as permissões na máquina.

Dando permissões ao arquivo

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

https://howtoinstall.co/pt/gcc-arm-linux-gnueabihf

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads/10-2-2020-11