要想编译出arm环境的C++可执行文件主要就是利用交叉编译器进行编译。编译过程本身都大同小异。

1.安装交叉编译器,交叉编译器的安装方法大致有下面几种:

  A.debian/ubuntu 系统可以直接输入命令安装:

sudo apt install g++-arm-linux-gnueabihf    

sudo apt install g++--arm-linux-gnueabihf        #这种方式还可以指定版本

  B.直接下载交叉编译器的二进制文件,arm官网下载地址,这个网站的下载速度比较慢,可以baidu关键字gcc-arm-none-eabi寻找国内的下载地址,下载解压,把解压目录加入PATH环境变量或者把解压出来的文件复制到/usr/bin目录

  C.下载Android NDK,NDK里面自带了适用于Android的交叉编译工具链,下载后在prebuilt目录可以找到

  D.下载gcc源代码,手动编译安装

以上几种方法除了手动编译可能会遇到各种依赖问题以外,其余的都比较简单,我这里刚好使用的是ubuntu 18.04的系统,就采用A方法安装的。

2.用交叉编译器编译代码,现在写一段很古老的程序,然后用交叉编译器编译:

#include<iostream>
using namespace std; int main()
{
cout << "hello world, from Android C++" << endl; return ;
}

执行命令编译:  

arm-linux-gnueabihf-g++-  -static  helloworld.cpp     # 一定要加上 -static 静态链接的选项,不然编译出来的a.out执行不了

3.将Android设备需要连上电脑,然后通过下面的步骤重新挂载Android为可读写的

adb root           # 该命令需要手机已经root
adb remount
adb shell "mount -o rw,remount /system" # rw 表示挂载为可读写read/write

挂载好了以后使用adb shell登录到Android的shell环境,创建一个我们本次测试使用的文件夹"helloworld"

然后使用adb命令把文件push到Android设备中去

adb push ./a.out /data/helloworld

4.再次登录Android shell环境,为a.out文件赋权限(如果已经有了可执行的权限就可以不用再次赋权限了),然后运行a.out

adb shell                #登录Android shell环境

cd /data/helloworld      #进入a.out所在目录

chmod  a.out          #赋权限为777

./a.out                  #运行a.out

可以看到,最终成功输出了 "hello world, from Android C++"  。

编译出arm Android环境下的C++可执行文件的更多相关文章

  1. Android 环境下编译FFmpeg

    Android 环境下编译FFmpeg 开发环境:Ubuntu 12.04.2 LTS , android-sdk-linux, android-ndk-r8e 一 .X264 编译 1.    X2 ...

  2. cocos2d-x 在android环境下开发遇到的一些bug

    今天在弄一个关于android环境下解析xml的东东,遇到了2个比较麻烦问题 1.android的apk下文件是压缩文件,io.open模式无法读取到数据的, 解决思路就是: CCFileUtils: ...

  3. 编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功)

    编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功) ------by  wangsh 2012.02.22 Mapnik 是一个开源的 Python/C++ 地图渲染引 ...

  4. 【LDAP安装】在已编译安装的PHP环境下安装LDAP模块

    在已编译安装的PHP环境下安装LDAP模块 (乐维温馨提示:其他模块也能以这个方式安装) 1.在PHP源码包内找到ldap模块文件 cd php-5.6.37 cd ext/ldap/ 2.phpiz ...

  5. 在高通平台Android环境下编译内核模块【转】

    本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei ...

  6. ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用

    作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  7. android环境下两种md5加密方式

    在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md ...

  8. cocos2d-x 3.x丨搭建Android环境下的开发环境

    所需要的一些工具软件: 1.JDK  官网下载地址:http://www.oracle.com/ttechnetwork/java/javase/downloads/index.html 2.Andr ...

  9. android环境下的即时通讯

    首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...

随机推荐

  1. Struts2问题总结

    1 如何搭建Struts2开发环境? Struts2 获取   http://struts.apache.org/download.cgi Struts-2.3.16.3-all.zip 创建Web项 ...

  2. 深入了解Cookie(1)------selenium2进行Cookie操作的前奏

    世界上最宽阔的是海洋,比海洋还宽阔的是天空,比天空还宽阔的是人的心量.做人的心量有多大.人生的成就就有多大. 不为一己之利去争.去斗.去夺,扫除报复之心和妒忌之念.自然"心底无私天地宽&qu ...

  3. 将QQ登录接口整合到你的网站和如何修改配置

    http://www.phpfensi.com/php/20140727/3998.html 摘要:QQ登录的官方SDK进行了一些修改,使其更加容易的整合到自己的网站上去... 对QQ登录的官方SDK ...

  4. (转)CentOS 5.5 64bit 编译安装Adobe FlashMediaServer 3.5

    http://download.macromedia.com/pub/flashmediaserver/updates/4_0_2/Linux_32bit/FlashMediaServer4.tar. ...

  5. luoguP3066 [USACO12DEC]逃跑的BarnRunning

    luoguP3066 [USACO12DEC]逃跑的BarnRunning 题目大意 给定一棵n个节点的树和参数L,查询每个节点子树中到达该节点距离<=L的数量(包括该节点) 偏模板的主席树 P ...

  6. BZOJ 4868-4873 题解

    BZOJ4868 每个结束位置的最优值很显然具有单调性,三分,再讨论一下就好了. #include<bits/stdc++.h> using namespace std; #define ...

  7. ubuntu上swift开发学习2

    使用包管理器(package manager)创建一个可执行的项目 1. 创建一个Hello目录,然后进入目录 $ mkdir Hello $ cd Hello 2. 使用包初始化命令,参数表示创建一 ...

  8. html5 手写的canvas实现

    试用支持canvas的浏览器,无JS依赖,运用新的HTML5技术DrawBoard.renderDrawer('myHandWrite',{  penColor:'#FF0000',  penWidt ...

  9. BZOJ 1600 [Usaco2008 Oct]建造栅栏:dp【前缀和优化】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1600 题意: 给你一个长度为n的木板,让你把这个木板切割成四段(长度为整数),并且要求这四 ...

  10. idea创建maven-archetype-webapp项目无java目录

    使用idea创建一个maven-archetype-webapp项目 查看项目的目录结构,在main的目录下没有java目录 在main目录下创建java目录 使用快捷键 ctrl+alt+shift ...