文章目录
I . Ubuntu 中交叉编译 Android 动态库
II . Ubuntu 中交叉编译 Android 静态库
I . Ubuntu 中交叉编译 Android 动态库
1 . 要编译的源文件 : add.c 源文件 ;
#include <stdio.h> int add(int a, int b){ return a + b; }
2 . 共享动态库编译参数 : 编译动态库需要添加 “-fPIC” 和 “-shared” 两个参数 ;
3 . 编译命令 :
① 设置 编译器 临时环境变量 :
export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
② 设置指定 头文件和函数库 的临时环境变量 :
export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
③ 最终命令 :
$CC $HEAD_LIB -fPIC -shared add.c -o libadd.so
4 . 编译结果 : 在该目录下生成了 libadd.so 动态库 ;
root@octopus:~/NDK/001_Compile# ls add.c root@octopus:~/NDK/001_Compile# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi" root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# $CC $HEAD_LIB -fPIC -shared add.c -o libadd.so root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# ls add.c libadd.so root@octopus:~/NDK/001_Compile#
目录中的 libadd.so 就是编译完成的动态库 , 该动态库可以放到 Android Studio 项目中使用 ;
II . Ubuntu 中交叉编译 Android 静态库
1 . 要编译的源文件 : add.c 源文件 ;
#include <stdio.h> int add(int a, int b){ return a + b; }
2 . 共享动态库编译参数 : 编译动态库需要添加 “-fPIC” 参数 , 先输出 .o 文件 , 然后 根据 .o 文化生成 静态库 ;
3 . 编译命令 :
① 设置 arm-linux-androideabi-gcc 交叉编译器 临时环境变量 : 用于生成 .o 文件 ;
export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
② 设置 arm-linux-androideabi-ar 工具 临时环境变量 : 使用 .o 文件生成静态库 ;
export AR=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
② 设置指定 头文件和函数库 的临时环境变量 :
export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
③ 最终命令 :
$CC $HEAD_LIB -fPIC -c add.c -o add.o
$AR r libadd.a add.o
4 . 编译结果 : 在该目录下生成了 libadd.a 静态库 ;
root@octopus:~/NDK/001_Compile# ls add.c libadd.so root@octopus:~/NDK/001_Compile# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# export AR=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi" root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# $CC $HEAD_LIB -fPIC -c add.c -o add.o root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# $AR r libadd.a add.o /root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar: creating libadd.a root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile# ls add.c add.o libadd.a libadd.so root@octopus:~/NDK/001_Compile# root@octopus:~/NDK/001_Compile#