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

.NET MAUI中JavaSystem.LoadLibrary()抛出UnsatisfiedLinkError问题排查

解决.NET MAUI嵌入Android外部.so库时的libc++_shared.so找不到问题
  • 补全依赖的标准库
    你用的外部库大概率依赖NDK自带的libc++_shared.so,得从NDK目录里提取对应架构的文件。NDK路径一般是$ANDROID_NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/<platform>/libc++_shared.so,把拿到的libc++_shared.so和你的目标.so文件放在同一个架构目录下(不管是Resources/lib/<platform>/还是Platforms/Android/lib/<platform>/都行)。

  • 修正.csproj配置,确保库被正确打包
    别单独写每个平台的Include,用通配符简化配置,而且Link属性必须按要求设置,不然Android构建系统认不出架构目录:

    <ItemGroup>
      <!-- 如果你用Resources目录结构 -->
      <AndroidNativeLibrary Include="Resources\lib\**\*.so">
        <Link>lib\%(RecursiveDir)%(Filename)%(Extension)</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </AndroidNativeLibrary>
      <!-- 如果你用Platforms/Android目录结构 -->
      <AndroidNativeLibrary Include="Platforms\Android\lib\**\*.so">
        <Link>lib\%(RecursiveDir)%(Filename)%(Extension)</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </AndroidNativeLibrary>
    </ItemGroup>
    
  • 调整库加载顺序
    在MainActivity.cs里,得先加载libc++_shared.so,再加载你的目标库,不然依赖关系会出问题:

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // 先加载依赖的标准库
        JavaSystem.LoadLibrary("c++_shared");
        // 再加载你的外部库
        JavaSystem.LoadLibrary("your-lib-name");
    }
    
  • 验证构建输出
    构建完项目后,去输出目录(比如bin\Debug\net8.0-android\android-arm64\lib\arm64-v8a\)看看,确认libc++_shared.so和你的目标.so都在里面,要是没复制过来,就得检查配置有没有写错。

  • 清理缓存重建
    删掉项目的bin和obj目录,重启Visual Studio再重新构建,有时候缓存会搞鬼。

内容的提问来源于stack exchange,提问作者HPe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:55:18