{"id":18627,"date":"2022-01-23T11:24:47","date_gmt":"2022-01-23T14:24:47","guid":{"rendered":"http:\/\/maurinsoft.com.br\/?p=18627"},"modified":"2023-08-21T16:56:54","modified_gmt":"2023-08-21T19:56:54","slug":"compilacao-cruzada-em-c-parte-3","status":"publish","type":"post","link":"https:\/\/maurinsoft.com.br\/wp\/en\/compilacao-cruzada-em-c-parte-3\/","title":{"rendered":"Compila\u00e7\u00e3o Cruzada em C &#8211; Parte 3"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Objetivo<\/h2>\n\n\n\n<p>Neste artigo iremos abordar como desenvolver aplica\u00e7\u00f5es cruzadas em C que compilam em desktop porem geram bin\u00e1rios para Android.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">GIT<\/h2>\n\n\n\n<p>Reposit\u00f3rio da Aplica\u00e7\u00e3o<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/marcelomaurin\/croxcompile\">https:\/\/github.com\/marcelomaurin\/croxcompile<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9 requisitos<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p> <br>apt install ncurses-base ncurses-term ncurses-examples ncurses-bin ncurses-doc ncurses-hexedit<\/p>\n\n\n\n<p> <br>sudo apt-get install libncurses5:i386 <\/p>\n\n\n\n<p> <br>sudo apt-get install libncurses5 <\/p>\n\n\n\n<p><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Baixe o compilador<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>wget  http:\/\/dl.google.com\/android\/repository\/android-ndk-r12b-linux-x86_64.zip<\/p>\n\n\n\n<p>unzip android-ndk-r12b-linux-x86_64.zip<\/p>\n\n\n\n<p>.\/android-ndk-r12b\/build\/tools\/make_standalone_toolchain.py &#8211;arch arm64   &#8211;install-dir ~\/arm<\/p>\n\n\n\n<p>.\/android-ndk-r12b\/build\/tools\/make_standalone_toolchain.py &#8211;arch arm &#8211;install-dir ~\/arm32<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Compile o projeto<\/h3>\n\n\n\n<p>Aqui apresento o v\u00eddeo e depois o processo completo:<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Crox Compile - Parte 3 - Android\" width=\"1170\" height=\"878\" src=\"https:\/\/www.youtube.com\/embed\/21qLRNH_X8o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\/home\/mmm\/arm\/bin\/clang -pie crox.c<\/p>\n<cite>Para gerar aplica\u00e7\u00e3o 64 bits<\/cite><\/blockquote>\n\n\n\n<p>Ou caso seu hardware n\u00e3o suporte 64 bits, use o seguinte comando.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p> \/home\/mmm\/arm\/bin\/clang -pie crox.c <\/p>\n<cite>Para gerar aplica\u00e7\u00e3o 32 bits<\/cite><\/blockquote>\n\n\n\n<p>Para autom\u00e1tizar o processo criamos o seguinte Makefile<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PROGRAMA=HELLO\nPROGRAMA32=HELLO32\nPROGRAMAARM=HELLOARM\n\n\nCC=gcc\nCCARM=arm-linux-gnueabi-gcc\nCCANDROID=~\/arm32\/bin\/clang\n\nSOURCE= crox.c\n\nall32: clean compile32\n\n\nall: clean compile\n\nclean:\n        rm -f *.o\n        rm -f $(PROGRAMA)\n\ncompile32:\n        $(CC) -m32  $(SOURCE) -o $(PROGRAMA32)\n\ncompile:\n        $(CC) $(SOURCE) -o $(PROGRAMA)\n\ncompileARM:\n        $(CCARM) $(SOURCE) -o $(PROGRAMAARM)\n\ncompileANDROID:\n        $(CCANDROID) -pie $(SOURCE)<\/code><\/pre>\n\n\n\n<p>Para compilar usando o Makefile digite:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>make compileANDROID<\/p>\n<cite>Compila 32 bits por padr\u00e3o.<\/cite><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Transferindo para o Android<\/h3>\n\n\n\n<p>Entre no seu equipamento, e ative o modo Dupera\u00e7\u00e3o USB.<\/p>\n\n\n\n<p>Depois entre liste se o device que esta tentando debugar apareceu em seu sistema:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>adb devices -l<\/p>\n<cite>Lista de devices ativos<\/cite><\/blockquote>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2022\/01\/image-41.png\" alt=\"\" class=\"wp-image-18637\"\/><\/figure>\n\n\n\n<p>Para nomes apenas:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>adb devices<\/p>\n<\/blockquote>\n\n\n\n<p>Enviando para device especifico<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>adb -s &lt;nomedev&gt; push a.out \/data\/local\/tmp\/.<\/p>\n<cite>Envia para o device especifico o bin\u00e1rio criado.<\/cite><\/blockquote>\n\n\n\n<p>E por fim executamos pela shell, remotamente:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>adb -s &lt;nomedev&gt; shell &#8220;.\/data\/local\/tmp\/a.out&#8221;<\/p>\n<cite>Execu\u00e7\u00e3o remota da aplica\u00e7\u00e3o<\/cite><\/blockquote>\n\n\n\n<p>Por fim os printes de execu\u00e7\u00e3o:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2022\/01\/image-42.png\" alt=\"\" class=\"wp-image-18639\"\/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>No modelo apresentado, conseguimos gerar um aplicativo, que roda em 4 ambientes diferente, todos compilados no Desktop:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linux x64<\/li>\n\n\n\n<li>Linux i386<\/li>\n\n\n\n<li>Linux ARM<\/li>\n\n\n\n<li>Android amr<\/li>\n<\/ul>\n\n\n\n<p>A versatilidade e alta dispon\u00edbilidade do C, \u00e9 pe\u00e7a unica que garante vida longa para esta popular linguagem.<\/p>\n\n\n\n<p>Por fim, concluimos nossa s\u00e9rie de artigos sobre compila\u00e7\u00e3o cruzada.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Refer\u00eancias<\/h3>\n\n\n\n<p><a href=\"https:\/\/adbshell.com\/commands\/adb-devices\">https:\/\/adbshell.com\/commands\/adb-devices<\/a><\/p>\n\n\n\n<p><a href=\"http:\/\/nickdesaulniers.github.io\/blog\/2016\/07\/01\/android-cli\/\">http:\/\/nickdesaulniers.github.io\/blog\/2016\/07\/01\/android-cli\/<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/developer.android.com\/ndk\/guides\">https:\/\/developer.android.com\/ndk\/guides<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/zoomadmin.com\/HowToInstall\/UbuntuPackage\/gcc-arm-linux-androideabi\">https:\/\/zoomadmin.com\/HowToInstall\/UbuntuPackage\/gcc-arm-linux-androideabi<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/20093173\/adb-shell-and-adb-push-for-specific-avd\">https:\/\/stackoverflow.com\/questions\/20093173\/adb-shell-and-adb-push-for-specific-avd<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Objetivo Neste artigo iremos abordar como desenvolver aplica\u00e7\u00f5es cruzadas em C que compilam em desktop porem geram bin\u00e1rios para Android. GIT Reposit\u00f3rio da Aplica\u00e7\u00e3o https:\/\/github.com\/marcelomaurin\/croxcompile Pr\u00e9 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 &#8211;arch arm64 &#8211;install-dir ~\/arm [&hellip;]<\/p>","protected":false},"author":1,"featured_media":1022,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,61],"tags":[91,113,135,136,142,143,159],"class_list":["post-18627","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-c-c","tag-android","tag-c","tag-compilacao","tag-compile","tag-crox-compile","tag-cruzada","tag-desktop"],"_links":{"self":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts\/18627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/comments?post=18627"}],"version-history":[{"count":1,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts\/18627\/revisions"}],"predecessor-version":[{"id":23796,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/posts\/18627\/revisions\/23796"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/media?parent=18627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/categories?post=18627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/en\/wp-json\/wp\/v2\/tags?post=18627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}