这里的做法只针对android-ndk-r19之前的版本。从android-ndk-r19开始,就不必再调用make_standalone_toolchain.py创建工具链了。
1. 下载 NDK
从Android官网NDK归档找到需要的NDK版本,并下载解压:
$ wget https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip
$ unzip android-ndk-r17c-linux-x86_64.zip
2. 创建独立工具链
make_standalone_toolchain.py 脚本从NDK创建自定义工具链。
- --arch指定处理器架构,
- --api是目标 Android API 级别。这个选项决定Sysroot, Sysroot是包含目标系统头文件及库的目录。
- 与Android API 级别相关的库位于$NDK/platfroms下,
- 其他库及头文件位于$NDK/sysroot下
- --stl 指定使用哪一个标准库。自 r18 起,所有独立工具链都使用 Clang 和 libc++。
$ ./build/tools/make_standalone_toolchain.py -h
optional arguments:
--arch {arm,arm64,x86,x86_64}
--api API Target the given API version (example: "--api 24").
--stl {gnustl,libc++,stlport} C++ STL to use.
--install-dir INSTALL_DIR Install toolchain to the given directory instead of packaging.
如下命令创建的工具链为ARM 64位,Android API 26,安装目录为ndk-toolchain。
$./build/tools/make_standalone_toolchain.py \
--arch arm64 \
--api 28 \
--install-dir=ndk-toolchain
ndk_toolchain主要包括如下目录:
- bin 交叉编译工具,如aarch64-linux-android-clang, aarch64-linux-android-clang++等
- sysroot 系统头文件及系统库
- include, lib, lib64 C++标准库等
3. CMake设置
如果使用CMake构建工程,需要配置相应的CMAKE_TOOLCHAIN_FILE,如下是针对如上工具链的例子。
# toolchain file example
set (CMAKE_SYSTEM_NAME Android)
set (CMAKE_SYSTEM_VERSION 28)
set (CMAKE_ANDROID_ARCH_ABI arm64-v8a)
set (CMAKE_ANDROID_STANDALONE_TOOLCHAIN ~/ndk_toolchain)
相关链接
CMake 常用法
用CMake构建中等规模的工程
在CMake工程中使用NDK独立工具链 (一)
在CMake工程中使用NDK独立工具链 (二)
参考资料
NDK 归档
https://developer.android.google.cn/ndk/downloads/older_releases.html
NDK - 指南 - 独立工具链
https://developer.android.google.cn/ndk/guides/standalone_toolchain
Cross Compiling for Android with a Standalone Toolchain
https://cmake.org/cmake/help/v3.12/manual/cmake-toolchains.7.html#id21
网友评论