Android JNI多CPP编译报错:libsample.so未找到,CMake配置是否有误?
问题分析与解决
你的CMakeLists.txt配置存在逻辑问题,直接导致了库加载崩溃:
核心问题
当前配置是将sample.cpp和capplication4.cpp两个文件编译到同一个共享库libcapplication4.so中,并没有单独生成libsample.so。但你在Java代码里尝试加载sample库(系统会自动查找libsample.so),这个库实际不存在,因此抛出UnsatisfiedLinkError。
两种解决方式
方式一:合并到单个库(推荐,减少库体积)
无需修改CMake配置,仅调整Java代码:所有需要调用JNI的类,只加载capplication4这一个库即可,两个cpp文件中的JNI函数都会包含在libcapplication4.so里。
方式二:生成两个独立库
如果确实需要两个单独的共享库,将CMakeLists.txt修改为以下内容,分别编译两个cpp文件为独立库:
cmake_minimum_required(VERSION 3.22.1) project("capplication4") # 编译capplication4库 add_library(capplication4 SHARED capplication4.cpp) target_link_libraries(capplication4 android log) # 编译sample库 add_library(sample SHARED sample.cpp) target_link_libraries(sample android log)
修改后重新编译,会生成libcapplication4.so和libsample.so两个文件,此时Java代码分别加载对应库即可正常运行。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

