背景:在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脚本以允许我们从命令行执行定制的工具链安装,脚本位于NDK/build/tools/目录中,其中NDK/build/tools/目录中,其中NDK/build/tools/目录中,其中NDK是NDK的安装根目录,本文中也就是~/Library/Android/sdk/ndk-bundle目录,自行编写一个脚本

#!/bin/shexport DEV=~/Library/Android/sdk
export NDK_HOME=~/Library/Android/sdk/ndk-bundleplatform=android-21
shmake=$NDK_HOME/build/tools/make-standalone-toolchain.sharchs=('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++))
dosh $shmake --arch=${archs[i]} --platform=$platform --install-dir=$NDK_HOME/Chain/android-toolchain/${archs[i]} --toolchain=${toolchains[i]}
done

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

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

自定义NDK交叉编译链(toolchain)相关推荐

  1. 安卓linux交叉编译,Linux Ubuntu下用Android NDK 生成独立交叉编译链

    本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...

  2. NDK 交叉编译常用变量

    总结一发NDK交叉编译的套路 工具说明 addr2line 把程序地址转换为文件名和行号.在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行 ...

  3. CURL NDK 交叉编译

    移植curl到android,且支持https和http2.0 依赖前两篇文章 libnghttp2 NDK 交叉编译 openssl NDK 交叉编译 创建工作目录,并进入 1 2 mkdir an ...

  4. android 能调用gcc_如何在命令行下使用Android NDK交叉编译工具

    我们知道,在Linux下可以使用gcc来把一份C代码编译成为Linux上的可执行程序, 如: $ gcc -o main.out main.c 而Android平台提供了NDK工具包来交叉编译可以运行 ...

  5. 如何在命令行下使用Android NDK交叉编译工具

    我们知道,在Linux下可以使用gcc来把一份C代码编译成为Linux上的可执行程序, 如: $ gcc -o main.out main.c 而Android平台提供了NDK工具包来交叉编译可以运行 ...

  6. linaro gcc 交叉编译链编译

    linaro gcc 交叉编译链编译全解析 在此编译的是4.8.3版本的gcc,依赖2.18的glibc,2.24的binutils 参考http://blog.chinaunix.net/uid-2 ...

  7. 【ANDROID 】交叉编译链工具

    ANDROID 交叉编译链工具下载 不受支持的 NDK 下载 ORB_SLAM2在Android上的移植过程 (Android Studio 2.2+OpenCV 3.2+Cmake)

  8. 自己动手编译交叉编译链

    这篇文章主要记录一下自己编译 交叉编译链工具的过程.其实很多工作都是别人已经帮我们做好了的,我只是使用一下别人做好的工具. 编译的过程中,主要使用到的工具是:crosstool-ng    编译的流程 ...

  9. arm生态发展与交叉编译链选择

    因为工作需要,最近在找一个能用于aarch64的交叉编译链.距离上次使用arm设备已经过去四五年了.arm发生了较大的变化,于是做了个完整的调研,并整理出来(资料来源于互联网,我只是按照时间线整理并补 ...

最新文章

  1. pythontype函数使用_基础教程:python isinstance与type函数用法
  2. Mybatis知识(4)
  3. mvp 在 flutter 中的应用
  4. 成功解决ValueError: could not convert string to float: ‘\\N‘
  5. java primary,java – 键’PRIMARY’的重复条目’string1-string2′
  6. wxml修改样式_微信小程序 动态绑定事件并实现事件修改样式
  7. Spring循环依赖的三种方式,你都清楚吗?
  8. 一日三项令人兴奋的Lucene功能
  9. JS,JQuery杂谈
  10. 计算机学业水平考试答题卡,高一年级期末信息技术考试(含答题卡)
  11. android程序中关于webview加载html文件
  12. 让AI自动调参,才是百度无人车的进化方式:适应环境全靠自己 | 论文
  13. 一些提高工作效率的黑科技软件
  14. MongoDB Could not find host matching read preference { mode: “primary” } for set shard1
  15. 离线使用yum·无法使用yum的情况下安装软件·最简单的方法
  16. const的意义及作用
  17. cad一键卸载工具叫什么_「CAD」一键卸载AutoCAD工具、拿走不谢
  18. 基于PHP+Html+mysql的客户关系管理CRM系统 文档+项目源码及数据库文件
  19. 苹果屏幕尺寸_iPhone 12屏幕维修价格出炉,买得起伤不起?
  20. 通过http请求上传含中文路径文件问题解决

热门文章

  1. 垂直网站之路:金融风暴加速向电子商务转型
  2. html动画(1)大白
  3. 我赌你的电脑里肯定有漏洞—不信测测看
  4. java微信公众号图文消息
  5. PMO和PM如何准备项目状态报告及进行项目进度汇报?【附项目状态表和进度跟踪表】
  6. 手把手教你快速入门 APP 的开发
  7. ASP.NET profile之 找不到存储过程dbo.aspnet_CheckSchemaVersion
  8. ansible第一次使用模块报错
  9. RuntimeError: Sizes of tensors must match except in dimension 2. Got 5 and 4
  10. 应届毕业生转行新媒体运营指南:学习新媒体运营的三大路径