【发布时间】:2020-12-26 17:17:32
【问题描述】:
我正在尝试在 linux 上使用 Emgu,但收到错误消息:
未处理的异常。 System.TypeInitializationException:
“Emgu.CV.CvInvoke”的类型初始化程序引发了异常。
---> System.DllNotFoundException: 无法加载共享库 'cvextern' 或其依赖项之一
在SO 和documentation 环顾四周后,我明白我需要:
确保非托管 DLL 位于执行目录中。
但是 - 我如何获得它们?
如果我在 Windows 机器上运行相同的项目(+ 取消注释对 Emgu.CV.runtime.windows 包的引用),我确实在我的 bin 文件夹中获得了 x86 和 x64 文件夹,我可以从中获取二进制文件,但显然当使用Emgu.CV.runtime.ubuntu 包,不会创建这些文件夹。
最小的、可重现的示例:
Program.cs:
using Emgu.CV;
using Emgu.CV.Structure;
using System;
namespace temp
{
class Program
{
static void Main(string[] args)
{
// Works on windows, fails on linux
var imageFromBytes = new Image<Rgb, byte>(2, 2);
//// Later on I would like this to work as well...
// var bytes = new byte[] { 1, 2, 3, 4 };
// CvInvoke.Imdecode(bytes, Emgu.CV.CvEnum.ImreadModes.Color, imageFromBytes.Mat);
}
}
}
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Emgu.CV.runtime.ubuntu" Version="4.4.0.4061" />
<!-- When running on windows & uncommenting this line - I get can get the binaries-->
<!-- <PackageReference Include="Emgu.CV.runtime.windows" Version="4.4.0.4061" /> -->
</ItemGroup>
</Project>
其他信息:
dotnet 版本:3.1.301
Emgu 版本:4.4.0.4061
【问题讨论】: