{"id":18603,"date":"2022-01-23T09:14:32","date_gmt":"2022-01-23T12:14:32","guid":{"rendered":"http:\/\/maurinsoft.com.br\/?p=18603"},"modified":"2022-01-23T09:14:32","modified_gmt":"2022-01-23T12:14:32","slug":"compilacao-cruzada-em-c-parte-2","status":"publish","type":"post","link":"https:\/\/maurinsoft.com.br\/wp\/compilacao-cruzada-em-c-parte-2\/","title":{"rendered":"Compila\u00e7\u00e3o Cruzada em C &#8211; Parte 2"},"content":{"rendered":"\n<p>No primeiro artigo, definimos o que seria compila\u00e7\u00e3o cruzada, e criamos nosso primeiro exemplo de compila\u00e7\u00e3o. Gerando bin\u00e1rio de 32bits em m\u00e1quina 64bits.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-maurinsoft\"><div class=\"wp-block-embed__wrapper\">\nhttp:\/\/maurinsoft.com.br\/index.php\/2022\/01\/22\/compilacao-cruzada-em-c\/\n<\/div><\/figure>\n\n\n\n<p>Neste segundo artigo, iremos dar continua\u00e7\u00e3o.<\/p>\n\n\n\n<p>Agora apresentando como compilar em um sistema operaciona x64 para arm.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9 requisitos<\/h2>\n\n\n\n<p>Instale os seguintes pacotes<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi <\/code><\/p><p><code>sudo apt install libncurses5-dev build-essential bison flex libssl-dev bc<\/code> <\/p><p><code>sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf<\/code> <\/p><p><code>sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi<\/code> <\/p><cite>Pr\u00e9 requisitos de instala\u00e7\u00e3o<\/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-36.png\" alt=\"\" class=\"wp-image-18606\"\/><\/figure>\n\n\n\n<p>Estes pacotes ir\u00e3o instalar as dependencias do ARM nesta plataforma.<\/p>\n\n\n\n<p>Eles ir\u00e3o criar duas pastas arm-linux-gnueabi e  <br \/>arm-linux-gnueabihf , ambas com pastas lib para inclus\u00e3o de respectivas bibliotecas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Git do projeto<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/marcelomaurin\/croxcompile\">https:\/\/github.com\/marcelomaurin\/croxcompile<\/a><\/p>\n\n\n\n<p>Usaremos o git do projeto anterior, agora com uma nova diretiva.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo<\/h3>\n\n\n\n<p>N\u00e3o apresentarei o fonte em C, pois j\u00e1 foi feito no artivo anterior, me atendo realmente o que foi adicionado neste artigo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Makefile<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\nPROGRAMA=HELLO\nPROGRAMA32=HELLO32\nPROGRAMAARM=HELLOARM\n\nCC=gcc\nCCARM=arm-linux-gnueabi-gcc\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<\/code><\/pre>\n\n\n\n<p>Podemos ver que adicionamos, a diretiva compileARM, onde chamamos o CCARM, que tem valor arm-linux-gnueabi-gcc<\/p>\n\n\n\n<p>A outra diferen\u00e7a \u00e9 o target de execu\u00e7\u00e3o, que chamamos de programaarm, para diferenciar dos demais bin\u00e1rios.<\/p>\n\n\n\n<p>Podemos compilar o programa, chamando a seguinte rotina:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>make compileARM<\/p><cite>compila\u00e7\u00e3o do programa<\/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-37.png\" alt=\"\" class=\"wp-image-18610\"\/><figcaption>Execu\u00e7\u00e3o em m\u00e1quina x64<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Rodando o programa<\/h3>\n\n\n\n<p>Agora iremos demonstrar a efetividade do bin\u00e1rio, executando o mesmo em um raspberry pi. Que \u00e9 uma m\u00e1quina ARM, rodando linux.<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Compila\u00e7\u00e3o cruzada - Segunda Parte\" width=\"1170\" height=\"878\" src=\"https:\/\/www.youtube.com\/embed\/akevXJYGpkg?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<p>Para tanto copiaremos o bin\u00e1rio e colocaremos na maquina alvo.<\/p>\n\n\n\n<p>Para esse feito usarei o bitviser.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2022\/01\/image-38.png\" alt=\"\" class=\"wp-image-18611\"\/><figcaption>Copiando o bin\u00e1rio gerado para a m\u00e1quina alvo<\/figcaption><\/figure>\n\n\n\n<p>Agora iremos d\u00e1r as permiss\u00f5es na m\u00e1quina.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2022\/01\/image-39.png\" alt=\"\" class=\"wp-image-18612\"\/><figcaption>Dando permiss\u00f5es ao arquivo<\/figcaption><\/figure>\n\n\n\n<p>Por fim, executaremos o bin\u00e1rio, e veremos seu resultado.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/maurinsoft.com.br\/wp-content\/uploads\/2022\/01\/image-40.png\" alt=\"\" class=\"wp-image-18613\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Podemos aproveitar o poder de processamento e velocidade dos desktop e gerar bin\u00e1rios nativos para mais de um tipo de equipamento.<\/p>\n\n\n\n<p>No pr\u00f3ximo post irei apresentar como fazer isso no android.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Refer\u00eancias<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.acmesystems.it\/arm9_toolchain\">https:\/\/www.acmesystems.it\/arm9_toolchain<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-jensd-039-s-i-o-buffer\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"VRbKGBHd1q\"><a href=\"https:\/\/jensd.be\/1126\/linux\/cross-compiling-for-arm-or-aarch64-on-debian-or-ubuntu\">Cross compiling for arm or aarch64 on Debian or Ubuntu<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Cross compiling for arm or aarch64 on Debian or Ubuntu&#8221; &#8212; Jensd&#039;s I\/O buffer\" src=\"https:\/\/jensd.be\/1126\/linux\/cross-compiling-for-arm-or-aarch64-on-debian-or-ubuntu\/embed#?secret=ejYvEhY3Lp#?secret=VRbKGBHd1q\" data-secret=\"VRbKGBHd1q\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><a href=\"https:\/\/howtoinstall.co\/pt\/gcc-arm-linux-gnueabihf\">https:\/\/howtoinstall.co\/pt\/gcc-arm-linux-gnueabihf<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/developer.arm.com\/tools-and-software\/open-source-software\/developer-tools\/gnu-toolchain\/gnu-a\/downloads\/10-2-2020-11\">https:\/\/developer.arm.com\/tools-and-software\/open-source-software\/developer-tools\/gnu-toolchain\/gnu-a\/downloads\/10-2-2020-11<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No primeiro artigo, definimos o que seria compila\u00e7\u00e3o cruzada, e criamos nosso primeiro exemplo de compila\u00e7\u00e3o. Gerando bin\u00e1rio de 32bits em m\u00e1quina 64bits. Neste segundo artigo, iremos dar continua\u00e7\u00e3o. Agora apresentando como compilar em um sistema operaciona x64 para arm. Pr\u00e9 requisitos Instale os seguintes pacotes sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi sudo apt install [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":451,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,61],"tags":[],"class_list":["post-18603","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-c-c"],"_links":{"self":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/18603","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/comments?post=18603"}],"version-history":[{"count":0,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/posts\/18603\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/media?parent=18603"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/categories?post=18603"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurinsoft.com.br\/wp\/wp-json\/wp\/v2\/tags?post=18603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}