You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:50:23