自定义NDK交叉编译链(toolchain)

背景:在Mac下编译FFmpeg库时,看了比较多的教程基本都失败,偶然间发现NDK在去GCC化,需要通过交叉编译来完成编译,这里记录下NDK交叉编译链过程

地址 https://developer.android.google.cn/ndk/guides/standalone_toolchain

简单说交叉编译就是在A平台下编译B平台上可以使用的二进制库文件。

环境

操作系统:mac os 10.14.2
ndk版本:android-ndk-r20
编译器:clang

选择工具链(toolchain)

android平台目前的架构有armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips,在编译不同平台架构的库时,我们需要指定不同的交叉编译链来完成编译的工作,具体对应关系如下表:

ABI toolchain
armeabi-v7a armv7a-linux-androideabi
arm64-v8a aarch64-linux-android
x86 i686-linux-android
x86-64 x86_64-linux-android

具体对应工具链的地址是在$NDK_HOME/toolchains目录中
在这里插入图片描述

制作工具链(toolchain)

NDK提供make-standalone-toolchain.sh shell脚本以允许我们从命令行执行定制的工具链安装,脚本位于 N D K / b u i l d / t o o l s / NDK/build/tools/目录中,其中 NDK是NDK的安装根目录,本文中也就是~/Library/Android/sdk/ndk-bundle目录,自行编写一个脚本

#!/bin/sh

export DEV=~/Library/Android/sdk
export NDK_HOME=~/Library/Android/sdk/ndk-bundle

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

archs=(
    'arm'
    'arm64'
    'x86'
    'x86_64'
)

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

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

把脚本保存为make_toolchain.sh,并添加执行权限。运行该脚本后,会在–install-dir的制定目录下生成对应的工具链文件夹
交叉编译toolchain结果图

具体编译FFMPEG过程见下篇
Mac下编译FFMPEG for Android

发布了26 篇原创文章 · 获赞 0 · 访问量 1119

猜你喜欢

转载自blog.csdn.net/Plx0303sunny/article/details/103478401