linux上构建交叉编译环境

13 篇文章 1 订阅
5 篇文章 0 订阅
1. 下载NDK

https://developer.android.google.cn/ndk/downloads/
在这里插入图片描述

2. 解压NDK,并且配置环境变量

export PATH=/xxx/android-ndk-r20:$PATH

3. 编译特定平台的工具链(这里是x86,通过adb shell getprop ro.product.cpu.abi查看)

(1)在NDK的build/tools目录有make-standalone-toolchain.sh 的程序让用户创建标准的交叉编译工具链(交叉工具链是指可以生成目标环境可运行代码的工具集);
(2)查看ndk支持编译哪些cpu
在toolchains目录中查看有:
aarch64-linux-android-4.9 arm-linux-androideabi-4.9 llvm renderscript x86-4.9 x86_64-4.9
(3)选择x86-4.9的cpu
执行:./build/tools/make-standalone-toolchain.sh --toolchain=x86-4.9 (参数–platform=android-15 可选平台)
最终,在/tmp/ndk-haward目录下生成i686-linux-android.tar.bz2压缩文件(解压:tar -jxvf i686-linux-android.tar.bz2),可以解压到任意一个文件夹
在这里插入图片描述

4. 配置工具链的g++/gcc环境变量

export PATH=/xxx/i686-linux-android/bin:$PATH
在这里插入图片描述

5. 在linux上利用交叉编译编译so库供android调用

先编写java文件

package com.example.x86demo;
public class X86Jni {
    public native String testHello();
}

接着,编译头文件
在这里插入图片描述
然后,编写c文件

//
// Created by MI on 2019/8/5.
//
#include "com_example_x86demo_X86Jni.h"
jstring JNICALL Java_com_example_x86demo_X86Jni_testHello(JNIEnv* env, jobject obj){
    jstring str =  (*env)->NewStringUTF(env,"Hello x86!\n");
    return str;
}

最后,编译动态库
i686-linux-android-gcc -shared -fPIC -I/home/haward/jdk1.8/include/ -I/home/haward/jdk1.8/include/linux/ main.c -o libhellojni.so
该so库可被android的x86系统调用
参考
https://blog.csdn.net/u010274731/article/details/80608376
https://www.jianshu.com/p/00865617abba
代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值