.NET MAUI中JavaSystem.LoadLibrary()抛出UnsatisfiedLinkError问题排查
补全依赖的标准库
你用的外部库大概率依赖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
相关产品推荐
相关产品推荐

