按官方文档为Android添加CMake测试项目时遇库未找到错误
问题分析与解决方案
问题背景
给Android应用主CMake配置引入测试项目(按官方文档操作),编译时出现链接错误,移除引入代码后构建正常。错误提示链接器找不到libatomic、libunwind以及libclang_rt.builtins-x86_64-android.a,且路径指向Linux目录(C:\PROGRA~1\LLVM\lib\clang\16\lib\linux\),与Android构建环境冲突。
核心原因
测试项目的CMake配置未正确继承主项目的Android工具链环境,导致链接器错误地去Linux库路径查找Android专属库;或者自定义的构建目录未被Android Studio的CMake工具链正确初始化,缺失必要的环境变量。
解决方案
1. 修正测试项目的CMakeLists.txt
打开../../test/cpp/CMakeLists.txt,检查并调整以下内容:
- 移除硬编码的Linux相关库路径或链接指令(比如手动指定
-L/usr/lib这类配置) - 避免覆盖
CMAKE_SYSTEM_NAME、CMAKE_ANDROID_NDK等Android关键变量 - 若测试项目为跨平台项目,添加Android环境判断逻辑:
if(ANDROID) # Android环境下的专属配置,比如链接系统日志库 find_library(log-lib log) target_link_libraries(your_test_target ${log-lib}) endif()
2. 调整构建目录为Android Studio默认路径
将自定义的test_build_DIR改为主项目CMake构建的子目录,确保继承工具链配置:
set(test_DIR ../../test/cpp) # 使用主项目构建目录下的子目录,替代自定义外部路径 set(test_build_DIR ${CMAKE_CURRENT_BINARY_DIR}/test_outputs) file(MAKE_DIRECTORY ${test_build_DIR}) add_subdirectory( ${test_DIR} ${test_build_DIR} )
3. 检查NDK与Clang版本匹配
错误中Clang版本为16,需确保使用的NDK版本支持该Clang版本:
- NDK r27对应Clang 16,r26对应Clang 15,r25对应Clang 14
- 在项目根目录的
local.properties中指定正确的NDK路径:ndk.dir=/path/to/ndk-r27
4. 强制传递Android工具链参数到子项目
若测试项目仍未正确识别Android环境,可在add_subdirectory前显式传递关键变量:
set(CMAKE_SYSTEM_NAME Android PARENT_SCOPE) set(CMAKE_ANDROID_NDK ${CMAKE_ANDROID_NDK} PARENT_SCOPE) set(CMAKE_ANDROID_ARCH_ABI ${CMAKE_ANDROID_ARCH_ABI} PARENT_SCOPE) add_subdirectory( ${test_DIR} ${test_build_DIR} )
验证步骤
- 清理项目:执行
Build > Clean Project - 重新构建:执行
Build > Rebuild Project - 若仍报错,查看测试项目的CMake日志,确认是否正确加载了Android工具链
内容的提问来源于stack exchange,提问作者John Glen
相关产品推荐
相关产品推荐

