升级OpenCvSharp NuGet后Ubuntu 18.04下Aruco模块报错求助
问题描述
将OpenCvSharp NuGet包升级至最新版本后,在Ubuntu 18.04系统中使用OpenCvSharp.Aruco模块时(已安装对应运行时NuGet包),出现以下异常:
未处理的异常: 在共享库“OpenCvSharpExtern”中找不到名为“aruco_Dictionary_delete”的入口点。
|ERROR| NativeMethods.aruco_Dictionary_delete => NativeMethods.aruco_Dictionary_delete => Program.CurrentDomain_UnhandledException - Line: 105 在共享库“OpenCvSharpExtern”中找不到名为“aruco_Dictionary_delete”的入口点。 System.EntryPointNotFoundException 在 OpenCvSharp.Internal.NativeMethods.aruco_Dictionary_delete(IntPtr ptr)
在 OpenCvSharp.Aruco.Dictionary.DisposeUnmanaged()
在 OpenCvSharp.DisposableObject.Dispose(Boolean disposing)
在 OpenCvSharp.DisposableObject.Finalize() ERROR 未处理的异常: 在共享库“OpenCvSharpExtern”中找不到名为“aruco_Dictionary_delete”的入口点。
解决方案
统一所有OpenCvSharp相关NuGet包版本
升级时必须保证OpenCvSharp4、OpenCvSharp4.Aruco、OpenCvSharp4.runtime.ubuntu.18.04-x64等所有相关包的版本完全一致。版本不匹配会导致托管代码与Native库的函数签名不兼容,从而触发入口点找不到的异常。可以通过NuGet包管理器批量更新,或使用命令行指定版本安装:dotnet add package OpenCvSharp4 --version <具体版本号> dotnet add package OpenCvSharp4.Aruco --version <具体版本号> dotnet add package OpenCvSharp4.runtime.ubuntu.18.04-x64 --version <具体版本号>安装系统级OpenCV依赖
Ubuntu 18.04下运行OpenCvSharp需要依赖系统原生的OpenCV组件,缺失Aruco相关依赖会导致Native库无法正常加载。执行以下命令安装必要依赖:sudo apt-get update sudo apt-get install libopencv-aruco-dev libopencv-dev清理项目缓存并重建
旧的编译缓存或残留的Native库文件可能引发冲突。按以下步骤操作:- 删除项目目录下的
bin和obj文件夹 - 清空NuGet本地缓存:
dotnet nuget locals all --clear - 重新构建项目:
dotnet build
- 删除项目目录下的
验证Native库中的函数存在性
使用nm命令检查libOpenCvSharpExtern.so是否包含目标函数:nm -D ./bin/Debug/netX.x/runtimes/ubuntu.18.04-x64/native/libOpenCvSharpExtern.so | grep aruco_Dictionary_delete如果无输出,说明当前版本的Native库确实缺失该函数。此时可以尝试降级到一个稳定的旧版本OpenCvSharp包,或向OpenCvSharp官方仓库提交问题反馈。
内容的提问来源于stack exchange,提问作者Adrián Fontal

