Android NDK链接外部SO报错:java.lang.UnsatisfiedLinkError问题求助
解决Android NDK链接外部SO时libc.so.6找不到的问题
错误原因
libc.so.6是Linux桌面系统(如Ubuntu)的GNU C标准库文件名,而Android使用的是Bionic C库,对应的文件名是libc.so,没有.6的版本后缀。你导入的libmd.so是针对Linux桌面平台编译的,并非Android NDK适配版本,因此在Android设备加载时会找不到依赖的libc.so.6。
解决方案
重新编译适配Android的libmd.so
获取libmd的源码,使用Android NDK的交叉编译工具链重新编译,生成对应Android架构(armeabi-v7a、arm64-v8a、x86、x86_64)的SO库。
若用CMake编译,可执行以下命令(替换为你的NDK路径和目标参数):cmake -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=arm64-v8a \ -DANDROID_PLATFORM=android-24 \ -S . -B build-android cmake --build build-android编译完成后,将生成的Android版SO库替换到项目
jniLibs/${CMAKE_ANDROID_ARCH_ABI}/目录下。验证外部SO的依赖(可选)
用NDK自带的readelf工具检查现有libmd.so的依赖,确认是否为桌面版本:${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-readelf -d ${CMAKE_SOURCE_DIR}/jniLibs/arm64-v8a/libmd.so若输出中包含
NEEDED libc.so.6,则可确认该SO为桌面版本,必须替换。确认CMake配置路径
现有CMake配置逻辑本身无问题,替换SO后需确保CMAKE_ANDROID_ARCH_ABI能正确匹配对应架构的SO目录,保证路径指向正确的Android版SO文件。
内容的提问来源于stack exchange,提问作者Li Yang
相关产品推荐
相关产品推荐

