CMake使用NDK独立工具链进行交叉编译

在交叉编译中,NDK是一个很好的工具。windows、linux、android、32bit、64bit,能够处理绝大部分程序的交叉编译。而CMake组织程序又使得程序具有良好的跨平台编译。NDK下载好之后,工具链无法直接被cmake使用,需要通过一个脚本生成独立的工具链。这篇博客介绍CMake使用NDK的独立工具链。

一、CMake使用工具链进行交叉编译

在介绍NDK之前,先介绍下CMake如何进行交叉编译。CMake交叉编译就需要使用交叉编译的工具链。比如可以在arm官网下载到一些工具链。

工具链目录 $(TOOL_CHAIN) 下面一般有一个 bin 目录,和 lib 目录, include 目录。bin目录下就是编译工具,同时,仅仅有编译器是不够的,还需要提供语言本身的标准库和标准包 ,比如libc、libc++、stl库等,这些都在 lib 目录中。

使用CMake时,(如果之前配置过成功,则 Delete Cache一下),然后点击config,这时我们就需要选择 cmake 使用的编译器了。(第三项和第四项是交叉编译,一个是使用工具链文件,也是一个 .cmake 进行编译环境配置,另一个是手工进行编译器配置)

选择交叉编译

在手工配置编译器时, 操作系统名称必须要填写。 如果程序是C、C++,则需要配置 c 编译器 和 c++ 编译器,这里博主选择的是 gcc 和 g++,这些编译器的路径都要写绝对路径,在编译工具链的bin目录下。然后在搜索标准库的时候,选择工具链的根目录作为标准库的搜索路径就可以了。如下图所示:

配置交叉编译

二、生成NDK独立工具链

NDK独立工具链需要使用NDK build/tools 下的 make-standalone-toolchain.sh 脚本进行生成。这个脚本需要进行一些配置,选择工具链,选择android api版本,选择处理器架构等,可以通过 –help命令进行查看。

NDK独立工具链生成脚本

其中toolchain就是要选择NDK toolchain目录下支持的工具链,platform就是NDK platform目录下的API。arch就是处理器架构

查看NDK支持的工具链

比如我们要给一个arm手机成功生成一个工具链,可以试一下

生成独立工具链

我们运行该脚本,得到一个压缩包,把这个压缩包解压,就是工具链了。我们在cmake配置编译工具的时候直接选择这个路径就好。工具链中的动态库,如果程序使用到了,该库也需要拷贝到目标机器上。

发表评论