Blog C/C++
Compilação Cruzada em C – Parte 3

Objetivo

Neste artigo iremos abordar como desenvolver aplicações cruzadas em C que compilam em desktop porem geram binários para Android.

GIT

Repositório da Aplicação

https://github.com/marcelomaurin/croxcompile

Pré requisitos


apt install ncurses-base ncurses-term ncurses-examples ncurses-bin ncurses-doc ncurses-hexedit


sudo apt-get install libncurses5:i386


sudo apt-get install libncurses5

Baixe o compilador

wget http://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip

unzip android-ndk-r12b-linux-x86_64.zip

./android-ndk-r12b/build/tools/make_standalone_toolchain.py –arch arm64 –install-dir ~/arm

./android-ndk-r12b/build/tools/make_standalone_toolchain.py –arch arm –install-dir ~/arm32

Compile o projeto

Aqui apresento o vídeo e depois o processo completo:

/home/mmm/arm/bin/clang -pie crox.c

Para gerar aplicação 64 bits

Ou caso seu hardware não suporte 64 bits, use o seguinte comando.

/home/mmm/arm/bin/clang -pie crox.c

Para gerar aplicação 32 bits

Para automátizar o processo criamos o seguinte Makefile

PROGRAMA=HELLO
PROGRAMA32=HELLO32
PROGRAMAARM=HELLOARM


CC=gcc
CCARM=arm-linux-gnueabi-gcc
CCANDROID=~/arm32/bin/clang

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)

compileANDROID:
        $(CCANDROID) -pie $(SOURCE)

Para compilar usando o Makefile digite:

make compileANDROID

Compila 32 bits por padrão.

Transferindo para o Android

Entre no seu equipamento, e ative o modo Duperação USB.

Depois entre liste se o device que esta tentando debugar apareceu em seu sistema:

adb devices -l

Lista de devices ativos

Para nomes apenas:

adb devices

Enviando para device especifico

adb -s <nomedev> push a.out /data/local/tmp/.

Envia para o device especifico o binário criado.

E por fim executamos pela shell, remotamente:

adb -s <nomedev> shell “./data/local/tmp/a.out”

Execução remota da aplicação

Por fim os printes de execução:

Conclusão

No modelo apresentado, conseguimos gerar um aplicativo, que roda em 4 ambientes diferente, todos compilados no Desktop:

  • Linux x64
  • Linux i386
  • Linux ARM
  • Android amr

A versatilidade e alta disponíbilidade do C, é peça unica que garante vida longa para esta popular linguagem.

Por fim, concluimos nossa série de artigos sobre compilação cruzada.

Referências

https://adbshell.com/commands/adb-devices

http://nickdesaulniers.github.io/blog/2016/07/01/android-cli/

https://developer.android.com/ndk/guides

https://zoomadmin.com/HowToInstall/UbuntuPackage/gcc-arm-linux-androideabi

https://stackoverflow.com/questions/20093173/adb-shell-and-adb-push-for-specific-avd

Delphi Lazarus
Instalando fpcupdeluxe Windows

O fpcupdeluxe é o instalador do lazarus já com atualização de pacotes automáticos e plataformas.





Qual a diferença de instalar o lazarus e o fpcupdeluxe?

No lazarus, voce instala apenas os compiladores para a plataforma alvo, ou seja, para o sistema que esta instalando. Isso quer dizer, que se instalar no windows 10, terá apenas os compiladores do windows 10.

Já o fpcupdeluxe, voce alem de instalar o lazarus do windows 10, no caso do nosso exemplo acima, tambem, já pode preparar binarios em linux i386, alem de arm, mac os, android entre outras plataformas que o lazarus permite compilar.

Existe um ótimo tutorial, para quem deseja instalar no linux i386, segue o link:

https://www.embarcados.com.br/cross-compilando-pascal-para-arm-utilizando-o-lazarus/

Aqui irei abordar o procedimento para o windows, pois há uma pequena variação.

Pré requisitos

  • GIT instalado
  • Git Tortoise (recomendado) porem não é requerido
  • GTK+-Bundle-3.4
  • Win64Bins.zip

Instalação

Primeiro baixe o projeto no repositório do git na pasta
c:\fpcupdeluxe, o repositório segue no link abaixo:

https://github.com/LongDirtyAnimAlf/fpcupdeluxe.git

Em seguida, pegue a ultima versão do binário já compilado e mova para a pasta c:\fpcupdeluxe

https://github.com/LongDirtyAnimAlf/fpcupdeluxe/releases

Lembrando que a versão para windows 10 64bits será como demonstrado:


Copie o binário na pasta c:\fpcupdeluxe , e execute o mesmo.

Irá aparecer uma tela, primeiramente, voce deve selecionar o caminho
c:\fpcupdeluxe\fpcupdeluxe, conforme figura abaixo:

Agora selecione o stable do FPC e Lazarus, conforme figura abaixo:

Click no botão Install/Update, conforme figura abaixo:

Lembre-se este procedimento irá demorar muito.

Então deixe rodando e vá fazer outra coisa, tipo escrever um tutorial 😉

Ao final da instalação surgirá o resultado como da imagem abaixo: ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

Finalização do procedimento de instalação

Rodando o Lazarus

O Lazarus pode ser encontrado no c:\fpcupdeluxe\fpcupdeluxe, conforme figura abaixo:

Entre na pasta lazarus, e procure o executável startlazarus.

aplicativo startlazarus

Segue o exemplo do Lazarus, já com aplicativo compilado.

Lazarus com projeto compilado!


Gerando binário para o Windows

Agora criaremos uma aplicativo e executaremos no windows.

Para tanto criei um projeto hello world, que disponibilizarei neste link:

http://maurinsoft.com.br/downloads/hello%20world.rar

Como estamos compilando em máquina nativa, não há muito a ser feito, basta compilar e rodar a aplicação.

Para compilar, selecione RUN e dentro dele a opção Build.

Podemos ver que ele funcionou.

Lembre-se que a opção Default é a nativa do sistema.

Para isso precisa ir no menu Project, selecionando a opção Project Options.

Lá surgirá um menu, conforme o da figura abaixo:

Selecione a opção Compiler Options, e dentro dela o item Config and Target, conforme figura acima.

Gerando binários para Raspberry PI – Linux

Agora irei descrever o procedimento para gerar compilação para o raspberry pi, estando no lazarus do windows.

Este procedimento aproveita, que o lazarus tem como lema a compilação cruzada, ou como eles dizem:

Write once! Compile Anyware!

Para isso precisa ir no menu Project, selecionando a opção Project Options.

Lá surgirá um menu, conforme o da figura abaixo:

Selecione a opção Compiler Options, e dentro dela o item Config and Target, conforme figura acima.

Selecione o processador (CPU) arm.

Selecione o OS (Sistema Operacional) linux.

Conforme figura abaixo:

Click no botão Install compiler, conforme figura acima.

O fpcupdeluxe irá providenciar a instalação do ambiente crox para esta plataforma, conforme descrito.

Este procedimento irá demorar alguns minutos.

Instalação/Atualização concluída com sucesso.

Para tanto criei um projeto hello world, que disponibilizarei neste link:

http://maurinsoft.com.br/downloads/hello%20world.rar

Basicamente a tela dele, é como se segue.

hello world

Aponte o Target OS, para ser Linux, e em seguida o CPU para arm, conforme figura acima.

Click no botão Test, para realizar teste de compatibilidade.

No meu teste, ele encontrou os fontes tanto do X64 como do ARM, dê ignorar, e verifique se deu tudo certo.

Na figura acima, podemos ver que ele conseguiu achar os alvos necessários.

Click no botão OK.

Agora vamos compilar, através do menu RUN, com o item Build.

O resultado esperado será o apresentado acima.

No meu caso eu salvei o projeto em:

C:\fpcupdeluxe\fpcupdeluxe\projects\projetos\hello world

Lá vc encontra 2 grandes arquivos:

O primeiro hello, é o do arm, pois não eh reconhecido como executável.

O segundo já é o compilado no windows.

Vamos copiar o primeiro hello, e copiar para o raspberry.

Usando o bitvise, copie o arquivo, o resultado, é como se segue:


Agora, no terminal, execute o comando a seguir:

chmod +777 ./hello

Não se esqueça de ir na pasta onde copiou o aplicativo, no meu caso foi /home/mmm/Downloads.

Agora entre no VNC, e execute o aplicativo na referida pasta.

Para executar, dê duplo click, o resultado será conforme apresentado.

Ao clicar no botão, surgirá a mensagem abaixo:

Parabéns! você conseguiu compilar no raspberry!

Gerando binário para o Linux X64

Agora iremos preparar o ambiente para compilar nosso exemplo no Linux X64. Ou seja em um pc com linux.

O primeiro passo conforme apresentado na imagem acima é selecionar a aba CROSS, em seguida em CPU selecionar a opção x86_64.

Ainda na aba CROSS, selecione em OS (Sistema Operacional) o sistema operacional LINUX, conforme figura acima.

Por fim, selecione o botão INSTALL COMPILER, conforme figura acima.

O processo irá demorar alguns minutos, pois o sistema irá gerar o ambiente necessário para compilar em Linux.

Para testarmos nosso binário, iremos primeiro montar uma VM (Virtual Machine) com ubuntu. No caso de nossa vm, já é 64bits.

VM Ubuntu

Agora identificaremos o IP para posteriormente transferir o arquivo para a maquina.

Agora iremos entrar no bitviser e conectar para podermos jogar nosso arquivo, quando pronto.

Pronto, agora irei aguardar até fpcupdeluxe terminar de preparar a versão de compilação cruzada linux X64.

Pronto agora podemos comecar a compilar nosso exemplo.

Começamos, entrando na pasta do lazarus.

No meu caso, podemos ver que instalei em C:\fpcupdeluxe\fpcupdeluxe\lazarus.

Agora iniciarei o lazarus, através do comando startlazarus.

Já no lazarus aberto, iremos carregar nosso projeto:

http://maurinsoft.com.br/downloads/hello%20world.rar

Neste exemplo, iremos mostrar uma janela simples, conforme apresentado abaixo:

Primeiramente precisamos apontar para o target correto, para isso, iremos em Project, selecionando a opção Project Options.

Selecione a opção Compiler Options, da arvore de opções do lado esquerdo.

Selecione a opção Config and Target, selecione agora a opção Target OS, indicando Linux.

Selecione o Target CPU family X86_64, conforme figura acima.

Para ter certeza que o processo de instalação esta correto, iremos clicar no botão Test, conforme figura acima.

Poderão surgir alguns avisos, dizendo que os fontes estão duplicados, dê ignore.

Click no botão OK.

Pronto! Podemos gerar o binário.

Agora iremos gerar o binário, simplesmente Clicando na opção de menu RUN, no sub item Build.

Estamos quase acabando, pois já geramos nosso binário. Agora devemos leva-lo para o linux e testar.

O nosso projeto foi originalmente gravado em

C:\fpcupdeluxe\fpcupdeluxe\projects\projetos\hello world

Podemos ver, que existem 2 arquivos hello, o primeiro com data de hoje, e o segundo com data de ontem. O primeiro já é o nosso aplicativo linux, e deve ser copiado para uma pasta no linux.

Conforme figura acima, podemos ver que copiamos o arquivo para a pasta do download.

O próximo passo é dar permissão de execução no arquivo.

Para tanto, iremos na pasta e em seguida dar o comando:

 chmod +777 ./hello

Pronto, agora basta chamar nosso aplicativo.

Ao clicar no nosso botão, teremos o seguinte resultado:

Observando, que agora temos 3 opções de binário.

Gerando binário para o MAC OS

Agora iremos para nossa terceira etapa, gerando para o MAC.

Irei gerar o binário para este mac, um modelo 2009, já velinho.

Que venho apresentando em diversos posts.

Primeiramente precisamos saber a versão do processador.

No nosso exemplo usamos um processador INTEL Core 2 Duo, o que iremos parametrizar.

Agora iremos novamente entrar no nosso fpcupdeluxe-x86_64-win64.exe, localizado na pasta C:\fpcupdeluxe

Entraremos na aba CROSS, e em seguida selecionamos CPU i386.

Agora marcamos no OS, o sistema darwin, que é o MACOS.

Erroneamente marcado como x86_64

Click em INSTALL COMPILER, e mostrará a aba abaixo, informando que para rodar o free pascal, necessita de versão superior ao 3.2, dê Yes.

Pronto, agora é só aguardar…

Para testar e fazermos testes, usaremos o RealVNC, pois facilita em muito.

Para tanto, configure em seu mac uma versão do RealVNC, e conecte com o view no seu PC, conforme demonstrado abaixo:

Crie uma pasta no MAC, para levar o binario.

Abra a pasta e já deixe pronto para a próxima etapa.

Pronto! A maquina cross esta pronta!

Agora iremos compilar no MAC

Para tanto, iremos abrir o Lazarus, que fica localizado em C:\fpcupdeluxe\fpcupdeluxe\lazarus.

Para rodar o Lazarus, execute o startlazarus, conforme figura acima.

Para gerar, entre no menu na opção Project, no sub item Project Options.

Agora, selecione a arvore de opções Compiler Options, e em seguida o sub item Config and Target, conforme figura acima.

Selecione no Target OS, o item Darwin, e para o Target CPU i386, conforme figura acima.

Selecione o Botão Test, conforme figura acima.

Por fim, click no botão OK.

Agora, iremos compilar nossa aplicação, para tanto click em RUN, selecionando a opção BUILD.

Agora se olharmos a pasta do projeto, eu instalei em C:\fpcupdeluxe\fpcupdeluxe\projects\projetos\hello world

Podemos ver que foi criado um arquivo hello e tambem uma pasta hello.app.

Devemos copiar ambos.

Pronto! Segue o executável, funcionando!

Gerando binário para o Android

Agora iremos criar um procedimento para criar aplicações android.

Para testar iremos utilizar um CubieTruck com SO Android 4.

CubieTruck é um equipamento bem versátil com 2Gb.

O CubieTruck permite ser usado tanto como maquina linux, como máquina Android.

Para me auxiliar, instalei o aplicativo que cria um servidor ssh.

Pronto, agora tenho comandos e ftp para lançar minha aplicação.

A ilustração acima, demonstra que posso disponibilizar arquivos para o celular.

Na ilustração acima, o console terminal, permite rodar comandos.

Podemos ver também, que a atualização do cpu ARM, com SO android foi finalizada.

Agora irei compilar meu projeto.

Agora, clicando em Test, gerando

Instalação de Pacotes Adicionais

O FPCUPdeluxe permite tambem a instalação de pacotes adicionais, tal como Zeoslib.

Apresentaremos o procedimento de instalação de um pacote.

Para tanto, click na aba Modules, selecione a aba que deseja instalar e click no botão Install module.

maurinsoft.com.br