编译出arm Android环境下的C++可执行文件

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

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

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

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

sudo apt install g++-8-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 0;
}

执行命令编译:  

arm-linux-gnueabihf-g++-8  -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文件赋权限(如果已经有了可执行的权限就可以不用再次赋权限了),然后执行:

adb shell                #登录Android shell环境

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

chmod 777 a.out          #赋权限为777

./a.out                  #执行a.out

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

原文地址:https://www.cnblogs.com/tsfh/p/9070494.html

时间: 2024-10-12 17:13:34

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

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

作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程. 环境准备: Ubuntu12.04 TLS android-ndk-r9d-linux-x86_64.tar.bz2 ffmpeg2.2 --------------------

Android环境下使用SocketClient

最近对原来写的SocketClient代码进行优化,从整体架构到具体细节,修改的地方比较多.今天有时间把SocketClient的相关知识整理一下.如果有错误的地方,还望指正!!! 一.整体流程: 描述如下: 1.  在Android环境下,SocketClient长连接,需要使用service. 2.  SocketManagerService是在APK启动时启动. 3.  SocketManagerService启动时则SocketClientThread也启动. 4.  View调用Soc

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

今天在弄一个关于android环境下解析xml的东东,遇到了2个比较麻烦问题 1.android的apk下文件是压缩文件,io.open模式无法读取到数据的, 解决思路就是: CCFileUtils::sharedFileUtils()->getFileData(),这个getFileData我做了一些修改,判断一下最后字符是否是"0"结尾:如果不是添加一个相应的结尾符 2.问题解决了,还是不能读取到xml的内容,该死的android环境下也不太好查找c++问题位置,搞了一下午,

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

本文转载自:http://blog.xeonxu.info/blog/2012/12/04/zai-gao-tong-ping-tai-androidhuan-jing-xia-bian-yi-nei-he-mo-kuai/ 高通Android环境中Linux内核会作为Android的一部分进行编译,直接使用make即可一次性从头编到尾.而有的平台比如Marvell,内核的编译操作相对比较独立,必须使用标准的内核编译命令进行单独编译.一般来说,用高通的这种方式比较傻瓜化,一步到底的感觉:而用Ma

android环境下两种md5加密方式

在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md5的认知目前仅仅停留在会使用的水平,想搞清楚还是要花点时间的,这是md5加密算法的相关介绍.本文主要介绍android平台下两种md5加密方式,分别为基于java语言的md5加密及ndk环境下基于c语言的md5加密. 下面代码为基于java语言的md5加密: public String getMD5

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

所需要的一些工具软件: 1.JDK  官网下载地址:http://www.oracle.com/ttechnetwork/java/javase/downloads/index.html 2.Android SDK  官网下载地址:http://developer.android.com/sdk/index.html 3.Android NDK  官网下载地址:http://developer.android.com/tools/sdk/ndk/index.html 3.ANT  官网下载地址:

openssl unicode编译以及VC++2015环境下的问题

这几天需要使用openssl,前期本机上保存的目录不知道哪天整理的时候删除了,索性下载最新的自己编译一下: 在最新版的openssl(openssl-1.0.2e),编译过程中出现了很多问题,这里主要汇总一下: 使用环境:win10/VC2015 1.如何编译unicode 版openssl? 在配置时添加选项: perl Configure VC-WIN32 -DUNICODE -D_UNICODE   2.如何使得编译的openssl库在debug程序时不报错? 修改ms\do_xx.bat

android环境下的即时通讯

首先了解一下即时通信的概念.通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯.消息通道可由TCP/IP UDP实现.通俗讲就是把一个人要发送给另外一个人的消息对象(文字,音视频,文件)通过消息通道(C/S实时通信)进行传输的服务.即时通讯应该包括四种形式,在线直传.在线代理.离线代理.离线扩展.在线直传指不经过服务器,直接实现点对点传输.在线代理指消息经过服务器,在服务器实现中转,最后到达目标账号.离线代理指消息经过服务器中转到达目标账

cocos2dx3.0-tinyxml在Android环境下解析xml失败的问题

正常情况下,我们在用tinyxml读取xml文件的的时候,会像下面这样写. 1 std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName;//获取文件路径. 2 XMLDocument *pDoc = new XMLDocument();//创建一个空的XMLDocument 3 XMLError errorId = pDoc->LoadFile(filePath.c_str());//用XMLD