React Native项目中如何解决java.lang.UnsatisfiedLinkError错误?
问题重现
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__emutls_get_address" referenced by "/data/app/~~7G6bfzz_ymffNERRYfMwmQ==/com.examp-A5s_wYrpMFdGAfa3G9Phhw==/lib/arm64/libfolly_runtime.so"
已尝试配置NDK参数:
ndk { abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64' }
但问题未解决,以下是可行修复方案:
检查NDK版本兼容性
这个符号缺失通常和NDK版本有关,__emutls_get_address是LLVM的emutls实现符号,部分旧NDK版本(比如r17及以下)或者和依赖库编译时用的NDK版本不匹配会导致问题。建议切换到NDK 21+版本(比如NDK 25 LTS),在local.properties里指定:ndk.dir=/path/to/ndk/25.2.9519653同时在app模块的
build.gradle里明确指定NDK版本:android { ndkVersion "25.2.9519653" // 其他配置... }确保依赖库与当前NDK编译链匹配
如果libfolly_runtime.so是第三方预编译库,检查它的编译NDK版本是否和你当前项目使用的NDK版本一致。如果不一致,要么替换成对应NDK版本编译的库,要么将项目NDK版本切换到和依赖库一致的版本。添加libc++_shared.so到打包列表
__emutls_get_address属于libc的符号,若依赖库使用了动态版libc,需要确保libc++_shared.so被打包到APK中。在build.gradle的android块里添加:android { defaultConfig { // 其他配置... externalNativeBuild { cmake { arguments "-DANDROID_STL=c++_shared" } } } // 若使用ndk-build则配置: externalNativeBuild { ndkBuild { arguments "NDK_TOOLCHAIN_VERSION=clang", "APP_STL=c++_shared" } } }注意:所有依赖的Native库必须使用相同的STL(全用c++_shared或全用c++_static),禁止混合使用。
清理重建项目
执行以下操作彻底清理缓存:- 点击Android Studio的
Build -> Clean Project - 删除项目根目录下的
.gradle、app/build文件夹 - 重启Android Studio后执行
Build -> Rebuild Project
- 点击Android Studio的
内容的提问来源于stack exchange,提问作者SREEDIVYA

