NDK 已经为我们提供了交叉编译工具链,用来编译第三方 C/C++ 库到 Android 中使用,比如 FFmpeg、x264、RTMPDump 等等。如何使用 ndk 工具也看个人兴趣,你可以通过下载好 ndk 工具后,通过指定工具链路径来完成。也可以使用 ndk 提供的 make_standalone_toolchain.py 脚本来生成我们想要的工具链,这个好处是它会将你要想要的工具都拷贝到指定目录,比较方便查找。

NDK 目录介绍

首先我们下载 android-ndk-r17c 目录,没有的可到官网下载。截图如下:

我们在使用交叉编译工具链的时候都用到 toolchains、sysroot、platforms。 toolchains ,一看名字就知道这个是关于编译工具链的。它针对不同 cpu 架构都提供了编译工具链。

值得说明的是,在 ndk-r18 就不再支持 mips 架构了。你要编译 arm 架构,你可以选择 32 位的 arm-linux-androideabi-4.9 或者 64 位的 aarch64-linux-android-4.9,目前主流手机 cpu 已经慢慢向 64 位慢进了,并且在新版本的 Android Studio3.5 中也会提示你最好包含 armeabi-v7a 和 arm64-v8a,如果你不加入 64 位支持,你的应用就没办法通过谷歌应用市场审核, 有图作证。

这里选择 arm-linux-androideabi-4.9 进入

很多人在网上拿着别人的配置就一通编译,也不看看别人是什么平台,有的人是 Mac OS 有的是 Linux,所以要注意一下这里的使用啦!继续跟进去看看

进入到这个目录下,也就是我们需要的所有交叉编译工具啦!

现在来看 platforms 目录

这里列出了 Android 各平台需要依赖的的库,随便选择一个进入。

从上面列表看到 libc、libz、libandroid、libOpenSLES 等等,这些就是系统提供给我们的库。或许大家没有用过, 不过在 NDK 开发或多或少都会用到的。

在比较老的 ndk 版本没有 sysroot 目录,这个目录存放的是系统库依赖的头文件,而老的版本则是在各平台下 usr 目录下有 include 目录。到后面比较新的版本就移到了 sysroot。具体是哪一个版本我也记不清了,读者可以自行求证。

选择 include 目录进入,如下列出了系统库需要头文件。

生成独立工具链

NDK 为我们提供了 make_standalone_toolchain.py 脚本来生成编译工具链。它的目录在 build/tools/ 下,使用也比较简单

--arch 指定 cpu 架构 --api 指定系统版本 --install-dir 生成的编译工具链目录

$NDK/build/tools/make_standalone_toolchain.py \

--arch arm --api 21 --install-dir /tmp/my-android-toolchain

复制代码

下面我生成了一个,我们看看它的文件结构。

你可以看到已经为我们生成了 arm-linux-androideabi, 在 sysroot 下包含了系统提供的库以及头文件。在 bin 目录下包含了交叉编译工具,比如 clang、gcc、ar、as、nm、strip 等等。主要做的工作就是将原先在 ndk 目录下的各目录结构归纳到一个目录。

具体的目录拷贝过程:

1. $NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/* -> 工具链安装目录/

2.$NDK/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib -> 工具链安装目录/sysroot/usr/

复制代码特别提醒: 在 NDK 19 开始就不需要使用独立工具链了, 在 toolchains/llvm/ 下已经提供好了编译工具, 读者自行去下载进入目录看看,和独立工具链编译出来的结构非常类似,不过它比较全的是针对不同平台版本

好了,现在就已经介绍完了 NDK 提供的交叉编译工具。知道了原理后,读者可以尝试去编译下第三方 C/C++ 库的来练练手。比如 x264。

android交叉编译工具链,NDK 交叉编译工具链使用相关推荐

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

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

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

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

  3. 制定交叉编译工具_制作交叉编译工具链的方法总结(详细)

    网上这类文章比较多,但是都不是很具体,刚好有门课结课论文要写这个,所以就总结了一下.以下的过程都是在ubuntu7.10上实际运行过的. 手工制作交叉编译工具 在制作工具开始前先要选好所需要的Binu ...

  4. 龙芯交叉编译环境搭建之交叉编译工具链配置

     龙芯交叉编译环境搭建之 交叉编译工具链配置 1 概括 本文档适用于龙芯3A3000/4000 UEFI代码编译,重点指导交叉编译环境的搭建方法,对系统安装不做介绍. Ubuntu系统(版本为ubun ...

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

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

  6. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

    文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...

  7. 利用 CMake 和 NDK 交叉编译 Android 下的可执行程序

    为什么80%的码农都做不了架构师?>>>    之前开发 Android 下的二进制程序都是开个 jni 目录, 手写 Android.mk, 然后调用 ndk-build 生成可执 ...

  8. NDK交叉编译及so库导入Android项目

    前言 记录 NDK交叉编译及so库导入Android项目 的简单步骤,以备后续用到时查看. 环境 在Linux和Mac环境下,分别编译输出so库. Red Hat Enterprise Linux 8 ...

  9. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  10. 【TA-霜狼_may-《百人计划》】美术2.1 DCC工具链与引擎工具链

    [TA-霜狼_may-<百人计划>]美术2.1 DCC工具链与引擎工具链 @[TOC]([TA-霜狼_may-<百人计划>]美术2.1 DCC工具链与引擎工具链) 2.1.1 ...

最新文章

  1. Tungsten Fabric SDN — Device Manager
  2. 2018.4.13 用java配置/生成Xml文件 结合IO流知识点
  3. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.27
  4. Springboot验证表单数据和自定义验证
  5. python百分号用法_python百分号%—%s、%d、%f
  6. UC上云 为网络大型游戏保驾护航
  7. docker公共存储库_Docker Hub公共镜像仓库的使用
  8. 《python透明人士,他是凭什么成为主流编程的宠儿?!》python基础语法
  9. 三分钟掌握Go mod常用与高级操作
  10. java 导出表 sql_java中把SQL数据库中的表导出到excel中.怎么实现
  11. 使用HTML5构建iOS原生APP(2)
  12. 时速云CEO:相对于IaaS和PaaS,未来CaaS将如何定位?
  13. java边缘检测_Sobel边缘检测实现
  14. AFNetWorking下载视频文件
  15. mysql 主从 只读,mysql主从复制(从库只读)
  16. 启动Vue项目发生的错误总结
  17. 奥赛金牌计算机博士中学老师,20位新老师19位是清北硕博,这所中学火了!简历曝光!...
  18. Centos搭建配置SDN
  19. matlab读文件函数程序,Matlab 文件读写函数
  20. MySQL 实现 Split 方法

热门文章

  1. eos java调用命名sql_普元 EOS Platform 7.6 开发命名SQL缓存示例
  2. postman接口文档
  3. matlab转置与共轭转置
  4. lisp画配筋_[BIM]柱配筋施工图的信息化应用
  5. 数据处理中常用的Excel函数
  6. 计算机 添加环境变量,windows系统手动添加环境变量的方法
  7. jquery api中文手册
  8. 【OR】YALMIP大M法和凸包
  9. 《大学之路》读书笔记(上)范文3700字
  10. 计算机课程用的ps是哪个版本,ps哪个版本适用于新手?