关于ndk 的交叉编译 环境

参考文章
https://zhuanlan.zhihu.com/p/69343040

1,什么是交叉编译
交叉编译是在一个平台上生成另一个平台上的可执行代码。所以我们在Linux上编译出可以在arm平台上使用的so库就是属于交叉编译。

2,系统环境
ubuntu18.04
ndk -> r21

3,在ndk 19以前 都是需要自己创建个交叉编译工具链
如使用ndk 19以后直接跳过
如下:
1,将NDK下载解压,并设置NDK_HOME的环境变量将NDK下载解压,并设置NDK_HOME的环境变量

    export NDK_HOME=/home/zzz/android-ndk-r10e
    export PATH=$NDK_HOME:$PATH

2,创建make_toolchain.sh 脚本并将一下内容复制到文件中保存,执行脚本,执行完成之后会在用户的根目录下生成一个android-toolchain的文件夹,内部有arm和arm64两个文件夹

export NDK_HOME=/home/zzz/android-ndk-r10e

platform=android-21
shmake=$NDK_HOME/build/tools/make-standalone-toolchain.sh

archs=(
 'arm'
 'arm64'
)

toolchains=(
 'arm-linux-androideabi-4.9'
 'aarch64-linux-android-4.9'
)

echo $NDK_HOME
num=${#archs[@]}
for ((i=0;i<$num;i++))
do
sh $shmake --arch=${archs[i]} --platform=$platform --install-dir=$HOME/Android/android-toolchain/${archs[i]} --toolchain=${toolchains[i]}
done

运行

   bash  make_toolchain.sh

成功后则构建完成
在这里插入图片描述

官方说明链接.
在这里插入图片描述

4,ndk使用19及其以上版本则直接使用ndk里面的工具链

export HOST_TAG=linux-x86_64
export TOOLCHAIN=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/$HOST_TAG
export AR=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
export AS=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-as
export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
export CC=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang
export CXX=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++
export LD=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld
export STRIP=/home/caizw/androidndk/ndroid-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip

此处可以看出我使用的ndk 为r21。而aarch64开头,则代表构建arm64位的
如需使用arm32位,则可以将aarch64-linux-android 改为 rm-linux-androideabi 。

export HOST_TAG=linux-x86_64
export TOOLCHAIN=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/$HOST_TAG
export AR=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
export AS=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-as
export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
export CC=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang
export CXX=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang++
export LD=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
export STRIP=/home/caizw/androidndk/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip

如直接复制到终端,则对当前终端有效,当终端关闭在这里插入图片描述时需要重新复制

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值