linux上构建交叉编译环境

1. 下载NDK

https://developer.android.google.cn/ndk/downloads/
linux上构建交叉编译环境_第1张图片

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),可以解压到任意一个文件夹
linux上构建交叉编译环境_第2张图片

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

export PATH=/xxx/i686-linux-android/bin:$PATH
linux上构建交叉编译环境_第3张图片

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
代码下载

你可能感兴趣的:(c-c++,Android,linux)