Android Studio添加.lib与.a静态库时CMake报链接语言错误如何解决
报错原因
- 核心错误出在
add_library(LIB GuruX/lib/GuruxDLMS)这行语法完全不符合CMake规范:add_library声明目标时,第二个参数需要指定库类型(STATIC/SHARED/IMPORTED),你直接传入静态库文件路径,CMake无法识别该库的编译语言,因此抛出链接语言无法确定的报错。 - 其余语法错误:
- 导入库目标名不匹配:你用
add_library(guruxLib STATIC IMPORTED)声明了导入目标guruxLib,后续set_target_properties却指定了不存在的目标libGuruX,配置完全不生效。 - 链接目录配置错误:
link_directories需要传入库存放的路径,你填成了头文件目录GuruX/include。 - 编译目标不符合Android项目要求:Android原生组件不需要生成可执行文件,
add_executable属于无效配置。 - 静态库格式不兼容:Windows平台的
.lib静态库无法在Android NDK的Clang编译环境中使用,你需要提前编译出对应Android x64架构的.a格式静态库。
- 导入库目标名不匹配:你用
修正后的CMakeLists.txt配置
cmake_minimum_required(VERSION 3.20) project(testGu) # 配置C++标准 set(CMAKE_CXX_STANDARD 14) # 引入头文件目录 include_directories(GuruX/includes) # 导入已编译好的libGuruX.a静态库 add_library(libGuruX STATIC IMPORTED) set_target_properties(libGuruX PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/GuruX/lib/libGuruX.a) # 导入已编译好的GuruxDLMS静态库(注意要替换为Android x64架构的.a文件,.lib无法使用) add_library(libGuruxDLMS STATIC IMPORTED) set_target_properties(libGuruxDLMS PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/GuruX/lib/libGuruxDLMS.a) # 生成供JNI调用的共享库 add_library(LIB SHARED main.cpp) # 链接两个导入的静态库到LIB目标 target_link_libraries(LIB libGuruX libGuruxDLMS)
验证步骤
- 确认
GuruX/lib目录下已经存放了对应Android x64架构的libGuruX.a和libGuruxDLMS.a - 确认
main.cpp中已经正确引入GuruX相关头文件,且调用逻辑符合JNI规范
内容的提问来源于stack exchange,提问作者Mohammed Hassan
相关产品推荐
相关产品推荐

