Linux中NDK编译静态库和动态库常见问题(Ubuntu)

搞了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

解决方式 :参考:【BUG解决】PyTorch ImportError: libtinfo.so.5: cannot open shared object file: No such file or directory_是王同学呀的博客-CSDN博客

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值