如何获取armv7a-unknown-linux-android21编译工具链
核心原因
armv7a-unknown-linux-android21是clang的目标架构三元组,不是独立工具链的固定命名前缀。从NDK r19版本开始,LLVM工具链取消了分架构的独立前缀二进制,所有目标架构共用通用clang/clang++入口,通过传参指定目标平台即可,因此r23c版本的bin目录下不存在对应命名的可执行文件属于正常情况,并非工具链缺失。
正确使用方法
- 编译对应目标的内核模块时,直接调用NDK中LLVM工具链目录下的通用
clang,追加参数--target=armv7a-unknown-linux-android21即可完成目标指定,无需单独寻找名称完全匹配的工具链二进制。 - 如果所用的内核编译脚本硬编码要求带目标前缀的工具链名(如
armv7a-unknown-linux-android21-clang格式的可执行文件),可直接在工具链bin目录下创建软链接映射通用二进制,示例操作:
# 进入NDK的LLVM工具链bin目录 cd <你的NDK解压路径>/toolchains/llvm/prebuilt/linux-x86_64/bin # 创建对应前缀的clang软链接 ln -s clang armv7a-unknown-linux-android21-clang ln -s clang++ armv7a-unknown-linux-android21-clang++ # 按需为ar、ld、nm、objdump、objcopy等其他二进制工具创建同名软链接即可适配脚本要求
旧版独立工具链生成说明
NDK r18b的make-standalone-toolchain.sh脚本无法生成对应名称工具链,是因为旧版本NDK对32位ARM平台的默认前缀命名为arm-linux-androideabi,指定API 21时生成的工具链前缀为arm-linux-androideabi21,和你看到的三元组仅存在命名规则差异,二进制兼容性完全一致,可直接使用。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

