Android环境集成BoringSSL遇CMake错误:Unknown CMake command perlasm
解决Android环境下BoringSSL编译的
perlasm命令错误 错误原因
BoringSSL的子模块CMake脚本(如crypto/fipsmodule/CMakeLists.txt)依赖项目根目录定义的全局CMake函数与配置,perlasm是BoringSSL根目录CMakeLists.txt中定义的自定义命令,用于处理汇编代码。直接单独引用子目录的CMake脚本会导致CMake找不到该自定义命令,从而触发错误。
修复步骤
- 调整项目结构:将完整的BoringSSL源码放置到项目的Cpp目录下(例如
src/main/cpp/boringssl/),必须包含BoringSSL根目录的CMakeLists.txt,不能仅复制部分子目录。 - 修改build.gradle配置:仅指定BoringSSL根目录的CMake脚本,而非多个子目录脚本:
externalNativeBuild { cmake { path "src/main/cpp/boringssl/CMakeLists.txt" } }
- (推荐)通过自定义CMake脚本链接BoringSSL:如果需要将BoringSSL与你的本地代码编译在一起,建议在自己的项目CMakeLists.txt中引入BoringSSL,示例如下:
cmake_minimum_required(VERSION 3.10) project(YourAppNative) # 引入BoringSSL子项目 add_subdirectory(boringssl) # 编译你的本地库 add_library(app-native SHARED your_source.cpp) # 链接BoringSSL的ssl和crypto库 target_link_libraries(app-native ssl crypto)
此时build.gradle需指向你自己的CMake脚本:
externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } }
- 确保环境有Perl:
perlasm命令依赖Perl处理汇编代码,Windows需安装Strawberry Perl,macOS/Linux一般自带Perl,同时确认Android NDK、CMake已正确安装。
验证
重新同步项目并编译,确认perlasm错误消失,保留原有的库加载代码即可:
static { System.loadLibrary("ssl"); System.loadLibrary("crypto"); }
内容的提问来源于stack exchange,提问作者Jungwon
相关产品推荐
相关产品推荐

