android可执行文件交叉编译和运行
来源:互联网 发布:赛尔网络个人业务 编辑:程序博客网 时间:2024/06/10 04:19
简介
android一般使用java进行开发,但是有时候我们可能需要使用到native语言,使用C/C++进行编译运行. 现在我们可以搜到很多使用android-studio和NDK进行编译so运行的方式,我就不再赘述了,我们这里主要讲如何利用已经有的NDK工具链,直接进行编译可执行文件和运行的方法
具体方法
系统环境
我使用的kali linux,可以认为是debian 8系统.
如果是windows可以使用cygwin.
编译工具链
如果你有NDK,在/Sdk/ndk-bundle/目录下,那么可以不用下载交叉编译工具链,否则你需要手动安装工具链,网上有很多方法,这里不再赘述. 建议通过android sdk manager下载ndk,这样既可以用于so的编译,也可以提取出具体工具链进行编译.
更改环境变量
如果你的目录比较冗长,那么没有必要每一次都手动去指定工具,我们选择更改环境变量的方式.
在~/.bashrc文件末尾添加:
export SYSROOT="$NDK/platforms/android-24/arch-arm"export ANDROID_GCC="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT -pie -fPIE"
$NDK为你的ndk安装目录,可能名为ndk-bundle.
SYSROOT为交叉编译时所需要的一些include文件等的目录,需要在编译时手动指定,因为我们不能使用pc电脑的include文件
-pie 和 -fPIE为指定用地址无关代码方式来编译文件,因为在android 4.4之后加入了保护,如果没有这个选项,android会拒绝运行,出现以下错误
error: only position independent executables (PIE) are supported.
关于版本,里面的数字基本就是版本,可以根据你手里的具体情况进行更改,重点为找到这个类似目录下的相应版本的文件(如arm-linux-androideabi-gcc)
编译
$ANDROID_GCC -o output input.c
运行
由于android的一些权限机制,位于sdcard和sdcard1的目录默认都是不可运行的,也就是说,如果adb push到这两个目录下还是会出现没有权限运行. /data/目录是可以运行的,可是不能直接放在这个目录下,因为没有权限直接放在这个目录. 所以我们的方法是放到/data/local/tmp/目录 这个目录下的文件可以运行,且可以通过adb push放进去
adb push output /data/local/tmp/adb shellcd /data/local/tmp./output
- android可执行文件交叉编译和运行
- android可执行文件交叉编译和运行
- 编译可在Android上运行的可执行文件:C/C++交叉编译环境
- linux运行应用程序not found问题(交叉编译生成的可执行文件)
- Android移植和交叉编译
- 交叉编译工具和qt安装,终端使用qmake编译arm版本可执行文件的方法
- Cygwin编译可执行文件独立运行
- Android下编译可执行文件
- 交叉编译Android系统Linux层应用软件程序并运行
- 曾经在linux中用交叉编译工具编了一个可执行文件在android系统的板子上跑,无法执行
- Android源码编译可执行文件 | 运行 | C层检测系统API版本号
- Android源码编译可执行文件 | 运行 | C层检测系统API版本号
- 在android下运行arm gcc工具链编译出来的可执行文件
- Android编译和运行原理
- 在命令提示符下编译C/C++源文件和运行可执行文件
- android NDK 交叉编译
- android NDK 交叉编译
- android 交叉编译命令行
- 以固定编码读取文件
- hdu 4833 Best Financing(百度之星初赛,DAG上dp,离散化)
- 调试tp驱动常用的adb命令
- s3c2440 触摸屏和ADC驱动移植
- Java 占用CPU使用率很高的分析
- android可执行文件交叉编译和运行
- android xfermode
- restful,ca,httpclient,https
- hduoj 3466 Proud Merchants(背包)
- bzoj 4318 OSU! 期望dp
- 关于html部分
- 寻找最近点(快速算法))
- HDU:2546 饭卡(经典01背包+贪心)
- poj1037