运行OpenCvSharp程序报错无法加载共享库OpenCvSharpExtern求助
异常信息(中文翻译)
未处理异常: System.TypeInitializationException: “OpenCvSharp.Internal.NativeMethods”的类型初始值设定项引发异常。 ---> System.DllNotFoundException: 无法加载共享库“OpenCvSharpExtern”或其依赖项之一。若要帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量: libOpenCvSharpExtern: 无法打开共享对象文件: 没有那个文件或目录 在 OpenCvSharp.Internal.NativeMethods.redirectError(CvErrorCallback errCallback, IntPtr userdata, IntPtr& prevUserdata) 在 OpenCvSharp.Internal.ExceptionHandler.RegisterExceptionCallback() 在 OpenCvSharp.Internal.NativeMethods.LoadLibraries(IEnumerable`1 additionalPaths) 在 OpenCvSharp.Internal.NativeMethods..cctor() --- 内部异常堆栈跟踪的结尾 --- 在 OpenCvSharp.Internal.NativeMethods.videoio_VideoCapture_new2(String filename, Int32 apiPreference, IntPtr& returnValue) 在 OpenCvSharp.VideoCapture..ctor(String fileName, VideoCaptureAPIs apiPreference) 在 OfflineVideoAnalysis.Program.Main(String[] args) 位置 /src/OfflineVideoAnalysis/Program.cs:行号 25
问题根因
该异常为Linux环境下运行基于OpenCvSharp开发的.NET程序的常见报错,本质是程序启动加载时找不到libOpenCvSharpExtern.so原生依赖库,或是该库依赖的系统底层音视频、图像处理组件缺失。
解决方案
- 补全OpenCvSharp依赖包
不要仅安装OpenCvSharp4主Nuget包,需同步安装对应系统架构的运行时包:X64架构Linux安装OpenCvSharp4.runtime.linux-x64,ARM架构Linux安装OpenCvSharp4.runtime.linux-arm/OpenCvSharp4.runtime.linux-arm64,Windows环境安装OpenCvSharp4.runtime.win。 - 安装系统底层依赖
OpenCvSharp的原生库依赖系统内置的多媒体处理组件,不同发行版执行对应命令安装即可:
Debian/Ubuntu系列:sudo apt install libopencv-dev libdc1394-25 libavcodec-dev libavformat-dev libswscale-dev libtbb-dev libjpeg-dev libpng-dev libtiff-dev
RHEL/CentOS/Fedora系列:sudo dnf install opencv-devel libdc1394 ffmpeg-devel libjpeg-turbo-devel libpng-devel libtiff-devel - 校验发布文件完整性
执行带运行时标识的发布命令,确保原生依赖被正确复制到输出目录:dotnet publish -r linux-x64 --self-contained false
发布后检查输出目录是否存在libOpenCvSharpExtern.so文件,缺失可手动从对应Nuget包的runtimes目录下复制对应架构的库文件到运行目录。 - 定位具体缺失依赖
以上操作完成后仍报错的,执行ldd命令查看库的依赖加载情况,找到标记为not found的缺失依赖后单独安装即可:ldd ./libOpenCvSharpExtern.so
也可以按照报错提示开启库加载日志定位问题:LD_DEBUG=libs ./你的程序执行文件名
内容的提问来源于stack exchange,提问作者santosh.pandey
相关产品推荐
相关产品推荐

