Android项目报错java.lang.UnsatisfiedLinkError:找不到libc++_shared.so库
解决方案
1. 移除手动加载libc++_shared.so的代码
当你在Gradle中配置-DANDROID_STL=c++_shared后,Android构建系统会自动处理libc++_shared.so的打包与依赖加载。不需要手动调用System.loadLibrary("c++_shared")——这个库会在你加载自己的Native库时被自动加载(因为你的Native库依赖它)。
把初始化代码改成加载项目中的自定义Native库(替换为你实际的库名称):
init { try { System.loadLibrary("mynative") // 替换为你的Native库名称 } catch (e: Exception) { Log.e(TAG, "Could not load library due to: ${Log.getStackTraceString(e)}") } }
2. 确认项目包含实际的Native代码/库
如果项目中没有任何自定义Native代码(即CMakeLists.txt中未定义add_library目标),构建系统不会自动打包libc++_shared.so——因为没有依赖它的模块,系统认为不需要该库。
解决方法:
- 确保
CMakeLists.txt中存在至少一个Native库目标,例如:
add_library( mynative SHARED src/main/cpp/native-lib.cpp # 替换为你的实际Native源文件路径 )
- 若暂时不需要实际Native代码,可创建一个空的源文件,让CMake生成空库,触发系统打包
libc++_shared.so。
3. 检查APK中是否包含libc++_shared.so
通过Android Studio的Build > Analyze APK功能打开APK,查看lib/<abi>/目录下是否存在libc++_shared.so:
- 若不存在,回到步骤2确认Native库配置是否正确;
- 若存在但架构与测试设备不匹配,检查Gradle的
abiFilters配置:
在defaultConfig > externalNativeBuild > cmake中,若设置了abiFilters,确保包含测试设备的CPU架构(如arm64-v8a、armeabi-v7a),或移除abiFilters让系统打包所有支持的架构:externalNativeBuild { cmake { cppFlags "" arguments "-DANDROID_STL=c++_shared" // abiFilters "arm64-v8a" // 若存在此配置,确认是否匹配设备架构 } }
4. 彻底清理并重构项目
若上述步骤都正确但问题依旧,尝试更彻底的清理操作:
- 执行File > Invalidate Caches... > Invalidate and Restart重启Android Studio;
- 删除项目根目录下的
.gradle文件夹和app/build文件夹; - 重新执行
Clean Project和Rebuild Project。
内容的提问来源于stack exchange,提问作者linker85
相关产品推荐
相关产品推荐

