簡體   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