编译出arm Android环境下的C++可执行文件
要想编译出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++可执行文件的更多相关文章
- Android 环境下编译FFmpeg
Android 环境下编译FFmpeg 开发环境:Ubuntu 12.04.2 LTS , android-sdk-linux, android-ndk-r8e 一 .X264 编译 1. X2 ...
- cocos2d-x 在android环境下开发遇到的一些bug
今天在弄一个关于android环境下解析xml的东东,遇到了2个比较麻烦问题 1.android的apk下文件是压缩文件,io.open模式无法读取到数据的, 解决思路就是: CCFileUtils: ...
- 编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功)
编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功) ------by wangsh 2012.02.22 Mapnik 是一个开源的 Python/C++ 地图渲染引 ...
- 【LDAP安装】在已编译安装的PHP环境下安装LDAP模块
在已编译安装的PHP环境下安装LDAP模块 (乐维温馨提示:其他模块也能以这个方式安装) 1.在PHP源码包内找到ldap模块文件 cd php-5.6.37 cd ext/ldap/ 2.phpiz ...
- 在高通平台Android环境下编译内核模块【转】
本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei ...
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- android环境下两种md5加密方式
在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md ...
- cocos2d-x 3.x丨搭建Android环境下的开发环境
所需要的一些工具软件: 1.JDK 官网下载地址:http://www.oracle.com/ttechnetwork/java/javase/downloads/index.html 2.Andr ...
- android环境下的即时通讯
首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送 ...
随机推荐
- c++对象内存的分配
1 关于c++的对象 只要是用了class或者struct定义的,都是对象,不管有没有方法.不过,一般情况下,没有方法的对象用struct关键字来定义. 2 不用new关键字定义对象 要看这样的对象在 ...
- ABAP 设置单元格颜色
http://blog.163.com/ronanchen@126/blog/static/172254750201161811040488/ http://blog.csdn.net/lhx20/a ...
- ES6中promise总结
一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...
- __builtin_constant_p(x) (转帖
本文转载自:http://blog.chinaunix.net/uid-29254195-id-3977753.html gcc的内建函数,当x为常数时返回1, x为变量时返回0. 不过这并不完全准确 ...
- BZOJ3262 陌上花开 —— 三维偏序 CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3262 3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit ...
- Spring Boot2.0之 原理—创建内置Tomcat容器
前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven 重点介绍后两条 首先内置Tomcat: SpringBoo ...
- ubuntu gitlab服务器搭建
gitlab服务器搭建 1.安装依赖包 sudo apt-get install curl openssh-server ca-certificates postfix 执行完成后,出现邮件配置,选择 ...
- javascript(7)
js中基于对象==js面向对象 js中没有类class,但是它 JavaScript是一种面向(基于)对象的动态脚本语言,是一种基于对象和事件驱动并具有安全性能的脚本语言.它具有面向对象语言所特有的各 ...
- Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引
Luke 5 发布,可视化 Lucene 索引查看工具 oschina 发布于2015年08月31日 这是一个主要版本,该版本支持 Lucene 5.2.0. 它支持 elasticsearch ...
- ajax异步上传文件FormDate方式,html支持才可使用
今天需要做一个头像的预览功能,所以我想到了异步上传文件. 总结几点: 异步上传难点: 文件二进制流如何获取 是否需要设置表单的头,就是content-Type那里.异步,所以无所谓了吧. 其他就差不多 ...