OpenCV 4.3.0 java .lang.UnsatisfiedLinkError в Eclipse - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь сопоставить шаблон с привязкой Java OpenCV 4.3.0 в Eclipse, но попытка загрузить изображение шаблона всегда приводит к этой ошибке:

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 и в других местах на Inte rnet, включая:

  • Указание на папку собственной библиотеки с помощью переменной «Местоположение собственной библиотеки» в определении пользовательской библиотеки в Eclipse.
  • Добавление местоположения папки собственной библиотеки в мою Переменная PATH.
  • Добавление местоположения .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, поэтому это также рабочий каталог программы.

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

После удаления каждого метода загрузки и последующего добавления их обратно по одному, я определил, что проблема, скорее всего, была вызвана тем, что Eclipse дважды загружал папку собственной библиотеки.

0 голосов
/ 18 июня 2020

UnsatisfiedLinkError - исключение времени выполнения, которое происходит при запуске вашей программы Java. Поэтому размещение вашего файла в исходной папке не сработает.

Вам нужно, чтобы он был доступен в месте, где ваша программа может его найти.

См. Эту статью, например:

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

В нем они помещают библиотеку в путь к библиотеке Linux. В windows вы аналогичным образом поместите его в текущий каталог (откуда вы запускаете) или в какое-то общее место.

В этой статье объясняется порядок поиска DLL в Windows: https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order

Вам не нужно явно вызывать System.loadLibrary () самостоятельно. Это ответственность библиотеки.

Ваша проблема в том, что OpenCV неправильно установлен на вашем компьютере или недоступен из Eclipse.

Инструкции о том, как заставить работать в Eclipse, см .:

Добавить .dll в java .library.path в проекте Eclipse / PyDev Jython

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...