繁体   English   中英

OpenCV 4.3.0 java.lang.UnsatisfiedLinkError 在 Eclipse

[英]OpenCV 4.3.0 java.lang.UnsatisfiedLinkError in Eclipse

我正在尝试与 Eclipse 中的 OpenCV 4.3.0 的 Java 绑定进行一些模板匹配,但总是会导致此模板出现错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_0(Ljava/lang/String;I)J

抛出此异常的代码行是这样的:

flowerTemplate = Imgcodecs.imread("/templates/flowerpot_white.png", Imgcodecs.IMREAD_COLOR);

我在 StackOverflow 和互联网上其他地方的类似问题上尝试了许多建议的解决方案,包括:

  • 在 Eclipse 中的用户库定义中使用“本机库位置”变量指向本机库文件夹。
  • 将本机库文件夹位置添加到我的 PATH 变量中。
  • 将本机 library.dll 位置添加到我的 PATH 变量中。
  • 设置 Eclipse 运行配置以将本机库文件夹 &.dll 位置添加到 PATH 和 CLASSPATH 变量。
  • 使用适当的 Java 代码加载库,以我看到的三种方式中的每一种方式,在三个不同的地方,它们都在引发异常的代码之前运行。
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.load(<path_to_the_dll>);

File opencvLibrary = new File(System.mapLibraryName(Core.NATIVE_LIBRARY_NAME));
System.load(opencvLibrary.getAbsolutePath());
  • 将有问题的.dll 放入我的源文件夹和每个子文件夹中。 我在 Eclipse 中运行它,所以这也是程序的工作目录。

UnsatisfiedLinkError 是运行 Java 程序时发生的运行时异常。 因此,将您的文件放在源文件夹中是行不通的。

您需要它在您的程序可以找到它的地方可用。

例如看这篇文章:

https://www.javaworld.com/article/2077520/java-tip-23--write-native-methods.html

在其中,他们将库放置在 Linux 的库路径中。 在 windows 中,您同样可以将其放在当前目录(您正在运行的位置)或某个共享位置。

本文解释了 Window 的 dll 搜索顺序: https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order

您不需要自己显式调用 System.loadLibrary() 。 那是图书馆的责任。

您的问题是 OpenCV 未正确安装在您的机器上或无法从 Eclipse 访问。

有关如何在 Eclipse 中工作的说明,请参阅:

在 Eclipse/PyDev Jython 项目中添加.dll 到 java.library.path

在删除所有加载方法,然后将它们一个一个添加回来后,我确定该问题很可能是由 Eclipse 两次加载本机库文件夹引起的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM