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

MAUI导入.so文件遇System.EntryPointNotFoundException错误排查

MAUI Android导入.so文件报错System.EntryPointNotFoundException的排查与解决
  • 库名填写错误
    Android平台加载原生库时,DllImport的库名不需要加lib前缀和.so后缀,你的代码中写的是libmlcamera-2.5.so,应该改为mlcamera-2.5,系统会自动补全前缀和后缀。

  • 字段初始化时机错误
    你在类的字段初始化阶段直接调用nativeCreateCamera(),此时原生库可能还未完成加载绑定,会导致找不到入口点。应该将调用逻辑移到构造函数或其他合适的方法中,示例代码:

    public class NativeLibs
    {
        private const string Library = "mlcamera-2.5";
        private long mNativePtr;
    
        [DllImport(Library, EntryPoint = "nativeCreateCamera", CallingConvention = CallingConvention.Cdecl)]
        private static extern long nativeCreateCamera();
    
        public NativeLibs()
        {
            mNativePtr = nativeCreateCamera(); // 移到构造函数中调用
        }
    }
    
  • .so文件存放路径错误
    MAUI Android的原生库应该放在Platforms/Android/lib/[abi]/目录下(比如Platforms/Android/lib/arm64-v8a/、Platforms/Android/lib/armeabi-v7a/),而不是Resources/lib/[abi]/,Resources目录用于存放资源文件,原生库放在这里无法被正确加载。

  • csproj配置项错误
    应该使用<AndroidNativeLibrary>而非<EmbeddedNativeLibrary>来引用原生库,后者是将文件作为嵌入资源打包,而前者才是Android原生库的正确配置,会将库打包到对应ABI的目录中:

    <ItemGroup>
        <AndroidNativeLibrary Include="Platforms/Android/lib/arm64-v8a/libmlcamera-2.5.so" />
        <AndroidNativeLibrary Include="Platforms/Android/lib/armeabi-v7a/libmlcamera-2.5.so" />
    </ItemGroup>
    
  • 验证原生库的导出符号
    确认nativeCreateCamera函数确实在.so文件中被正确导出:
    使用Android NDK自带的nm工具执行命令:

    nm -D libmlcamera-2.5.so | grep nativeCreateCamera
    

    如果没有找到对应的符号,说明函数可能被C名字修饰(如果是C编写的库),此时需要在原生代码中用extern "C"包裹函数声明,避免名字修饰:

    extern "C" {
        long nativeCreateCamera() {
            // 函数实现
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:57:47