Android应用加载.so库报错:dlopen failed e_version:65725求助
解决Android加载.so库时出现的
e_version: 65725错误 错误分析
你遇到的java.lang.UnsatisfiedLinkError: dlopen failed: ... has unexpected e_version: 65725,本质是**.so库的ELF版本过高**。65725对应的是ELF版本EV_CURRENT(十六进制0x10001),这是桌面Linux系统使用的新版ELF格式,Android的动态链接器不支持该版本,导致无法加载。
解决步骤
检查.so库的ELF版本
用readelf工具查看库的ELF头信息:readelf -h libgeneraldecryptjni.so查看输出里的
Version字段,如果显示0x10001,就确认是版本不兼容问题。重新编译.so库
必须使用Android NDK官方工具链编译,不要用桌面Linux的GCC/Clang:- 用ndk-build或CMake配置目标Android API等级(对应你的
minSdkVersion),确保编译时使用NDK提供的sysroot和工具链。 - 编译时指定正确的ABI(比如你用到的
arm64-v8a),避免交叉编译时引入桌面平台特性。
- 用ndk-build或CMake配置目标Android API等级(对应你的
校验libs目录结构
确保src/main/libs下的目录结构符合Android规范:src/main/libs/ ├── arm64-v8a/ │ └── libgeneraldecryptjni.so └── armeabi-v7a/ # 如需支持32位则保留 └── libgeneraldecryptjni.so不要将不同ABI的库混放,也不要放在错误的目录下。
优化build.gradle配置
当前的sourceSets配置没问题,可以补充ABI过滤,减少包体积同时避免加载错误ABI的库:android { defaultConfig { ndk { abiFilters 'arm64-v8a' // 只保留你需要的ABI } } sourceSets.main { jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] // 禁用自动ndk-build } }
内容的提问来源于stack exchange,提问作者Cube
相关产品推荐
相关产品推荐

