从NDK r10e提取交叉编译链过程

从NDK r10e提取交叉编译链过程


前言

今年公司需求把嵌入式c/c++源码移植到Android系统里面,需要获取交叉编译器,经过一番折腾,终于完成,记录一下。


系统信息:ubuntu 1604

板子信息:RK3288

安卓版本:5.1.1

1.下载ndk源码。

根据手上英码的开发板信息,模块是RK3288,Android version是5.1.1。 我们需要用4.8的编译器,Android API等级是21,需要下载ndk版本是10,9及以下的ndk版本没有Android-21的platform,11及以上的ndk版本,没有4.8的编译器,只有4.9编译器。

https://developer.android.google.cn/ndk/downloads/older_releases

开始进入会有条款询问,同意即可。

拉到最下面可以看到ndk r10e 选择下载:android-ndk-r10e-linux-x86_64.zip既可。文件有1G多,也可以用我下载好的源码包。

链接: https://pan.baidu.com/s/1mEU1tz0tA62_xV_VCpv5TQ 提取码: vu62 

 

2.执行脚本导出编译器。

解压zip包(没有zip工具的自行下载),uzip android-ndk-r10e-linux-x86_64.zip

然后进入ndk顶层目录,cd android-ndk-r10e

执行脚本指定目录生成编译器包。

./build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.8 --platform=android-21 --abis=armeabi-v7a --package-dir=/work/huangriwang/

 

 

没有报错即可。就可以在/work/huangriwang/看到生成的编译器的压缩包

 

根据安卓板子的基本信息,我们需要指定编译链的参数。

--toolchain= 指定编译版本,4.8,英码的屏使用的编译器版本是4.8.

--platform= 指定安卓 API等级,英码用的是安卓5.1,根据查到的对应关系,应该用android-22 ,但是ndk r10e 没有这个platform,经过测试用安卓5.0的也可以用,所以这里使用的是android-21.

--abis= 指定arm架构,RK3288采用的是armV7a,这里指定armeabi-v7a。

--package-dir= 指定编译器压缩包存放路径,默认是/tmp/ndk-用户名/这个目录,建议修改一下,这个是临时目录重启后文件就没有了。

 

3.安装编译器(拷贝和添加环境变量)

用tar命令解压生成的压缩包,再把相应的路径添加的环境变量PATH即可。

 

 

4.测试

 

能看到编译器信息。

可以用ndk里面的测试代码进行测试编译器是否正常。

/work/huangriwang/android-ndk-r10e/tests/standalone

basic-c-compile  c代码的helloworld

basic-cxx-compile  c++代码的helloworld

 

例如:

 

注意,安卓4.4以后需要用PIE格式编译。需要加编译的时候需要加-pie -fPIE 这两个参数

 

查看文件信息可以看到shared object 就可以了。C++类似,编译器换安卓的g++即可。

编译好的文件可以用个adb push到安卓里面

拷贝文件命令

adb root  切换用户,拷贝文件需要root用户,默认是shell用户。

adb remount  重新挂载,默认是只读系统,重新挂载可以变为读写。

 

adb push e:\a.out /data/local/ 执行就可以把e盘的a.out文件放到安卓的/data/local/

路径可以改,但是不能放到SD卡目录,这个目录是不能执行的

 

adb shell 进入shell终端,里面操作就是Linux的操作。

进入/data/local/,因为push进来的文件是没有执行权限的。

Chmod 777 a.out 开放权限既可。

./a.out 就可以看到输出helloworld。

 

到这里,从NDK源码包提取的编译链,并且测试成功了。Goodluck。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值