You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android项目CMake导入依赖SO库报错,求正确配置方法

问题:Android项目导入预编译SO库的CMake链接错误

环境与需求

需要导入三个预编译SO库:A.so(依赖B.so和C.so)、B.so、C.so,同时有A.h头文件。当前Gradle配置已指定ABI为arm64-v8a,CMake版本3.18.1。

错误分析

编译时出现Shell语法错误,链接命令中出现非法的-l( -larm64-v8a -l)参数,核心问题:

  • CMake指令拼写错误:cmake_minimum_required(VERSIO 3.4.1)中VERSIO应为VERSION,错误指令导致CMake解析异常,生成非法链接参数。
  • 不必要的头文件添加:add_library中把A.h作为源文件传入,头文件无需加入编译目标,只需通过路径引入即可。
  • 未明确库间依赖:A.so依赖B.so和C.so,但当前配置未声明这层依赖,可能引发链接顺序问题。

修复步骤

  • 修正CMake版本指令拼写:将VERSIO改为VERSION。
  • 移除add_library中的头文件:仅保留源文件my_native.cpp。
  • 声明库间依赖关系:给libA添加对libB和libC的依赖,链接my_native时只需关联libA,CMake会自动处理传递依赖。
  • 确认头文件路径:确保INCLUDE_DIRECTORIES指向A.h所在目录。

修复后的完整CMake配置

cmake_minimum_required(VERSION 3.4.1)

project(MyProjectNative)

# 构建自定义Native库,仅传入源文件
add_library(
        my_native
        SHARED
        my_native.cpp)

# 引入头文件路径,确保A.h可被正确引用
# 如果A.h在include子目录,替换为 ${CMAKE_CURRENT_SOURCE_DIR}/include
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

# 查找NDK内置的log库
find_library(
        log-lib
        log)

# 导入预编译A.so
add_library(libA SHARED IMPORTED)
set_target_properties(libA PROPERTIES
        IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/A.so)

# 导入预编译B.so
add_library(libB SHARED IMPORTED)
set_target_properties(libB PROPERTIES
        IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/B.so)

# 导入预编译C.so
add_library(libC SHARED IMPORTED)
set_target_properties(libC PROPERTIES
        IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${ANDROID_ABI}/C.so)

# 声明A对B、C的依赖,INTERFACE表示依赖会传递给链接libA的目标
target_link_libraries(libA INTERFACE libB libC)

# 链接自定义库到libA和log库
target_link_libraries(
        my_native
        libA
        ${log-lib})

验证要点

  • 确认libs/${ANDROID_ABI}目录下存在对应ABI的A.so、B.so、C.so文件。
  • 若A.h不在CMakeLists.txt所在目录,调整INCLUDE_DIRECTORIES路径至正确位置。

内容的提问来源于stack exchange,提问作者Maxwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:25:35