搞了2天的交叉编译,终于把动态库和静态库搞出来了...很开心
看一下成果:
交叉编译距离流程:请参考《Linux中NDK编译静态库和动态库,在AndroidStudio上导入》原文
这篇文章,我的操作也是这个流程 在其中踩坑;
注意点:
1.我使用的是VM+Ubuntu,也可用VM+centos,还有W10 的子系统Ubuntu(环境可能不全);
2.环境变量
# NDK目录
export NDK="/root/my-ndk/android-ndk-r17c"
# NDK 的 x86的gcc
export NDK_GCC_x86="$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-gcc"
# NDK 的 x64的gcc
export NDK_GCC_x64="$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-gcc"
# NDK 的 arm32的gcc
export NDK_GCC_arm="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"
# NDK 的 arm64的gcc
export NDK_GCC_arm_64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc"
# --sysroot 寻找库文件头文件 -isystem 寻找头文件 -isystem C运行期寻找asm
# x86
export NDK_CONFIG_86="--sysroot=$NDK/platforms/android-28/arch-x86 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/i686-linux-android"
# x64
export NDK_CONFIG_64="--sysroot=$NDK/platforms/android-28/arch-x86_64 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/x86_64-linux-android"
# arm32
export NDK_CONFIG_arm="--sysroot=$NDK/platforms/android-28/arch-arm -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/arm-linux-androideabi"
# arm64
export NDK_CONFIG_arm_64="--sysroot=$NDK/platforms/android-28/arch-arm64 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/aarch64-linux-android"
# 用于静态库编译
# x86
export NDK_AR_x86="$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-ar"
# x64
export NDK_AR_x64="$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/x86_64-linux-android-ar"
# arm32
export NDK_AR_arm="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
# arm64
export NDK_AR_arm_64="$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"
这个把我坑死了,我也是初学者,总数忘记执行source profile这个,一定记住呀!!!!还有就是在当前窗口一定要使用root ,不然也会有莫名的问题
配置环境变量
需要进入 vim /etc/profile
source profile
其中还遇到使用source profile也不生效,需要进入etc文件目录
fly@ubuntu:~/Desktop$ sudo su root
[sudo] password for fly:
root@ubuntu:/home/fly/Desktop# cd /ctc
bash: cd: /ctc: No such file or directory
root@ubuntu:/home/fly/Desktop# cd /etc
root@ubuntu:/etc# ls profile
profile
root@ubuntu:/etc# vim profile
查看生效小技巧:环境变量定义一个名称fly,然后使用 echo $fly 打印结果看是不是输出的Flys is boy!!!,如果不是就说明没有生成;
export fly="Flys is boy!!!"
3. 编译静态库《$NDK_GCC_arm $NDK_CFIG_arm -fPIC -c get.c -o getndk.o》
报错libtinfo.so.5: cannot open shared object file: No such file or directory
root@ubuntu:/home/fly/NDK# $NDK_GCC_arm $NDK_CFIG_arm -fPIC -c get.c -o getndk.o
root@ubuntu:/home/fly/NDK# $NDK_AR_arm rcs -o libgetndk.a getndk.o
/home/fly/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar: libtinfo.so.5: cannot open shared object file: No such file or directory