JNA: указанный модуль не найден в скомпилированном jar - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть C ++ .dll в моем проекте Spring Boot Java.Все выглядит хорошо, и метод из .dll вызывается, когда:

  1. Я запускаю приложение из IDE
  2. Я компилирую файл с mvn pack & java -jar target/Project-0.0.1-SNAPSHOT.jar

Iпопытался скопировать проект на другую машину, и у меня возникла эта проблема:

  1. Когда я запускаю приложение из IDE, все в порядке

  2. Когда я запускаю то же самоекоманда в проекте mvn pack & java -jar target/Project-0.0.1-SNAPSHOT.jar, и она называется .dll метод, это сбой с сообщением об ошибке:

java.lang.UnsatisfiedLinkError: The specified module could not be found.

    at com.sun.jna.Native.open(Native Method) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
    at com.sun.jna.Native.open(Native.java:1759) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
    at com.sun.jna.Library$Handler.<init>(Library.java:147) ~[jna-4.1.0.jar!/:4.1.0 (b4)]
    at com.sun.jna.Native.loadLibrary(Native.java:412) ~[jna-4.1.0.jar!/:4.1.0 (b4)]`.

Примечание: у меня Microsoft Visual C ++Распространяется 2017 на обеих машинах.

Если я перемещаю файл .dll в корневой каталог проекта, он работает.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы используете JNA внутри вашего проекта.JNA требует, чтобы некоторые нативные библиотеки были правильно установлены.Например, для платформы Windows требуется jnidispatch.dll.

В вашем случае вам необходимо загрузить необходимые собственные библиотеки, например, https://github.com/java-native-access/jna/blob/master/lib/native/win32,, и поместить его в каталог, в котором ваша JAVA может выполнить поиск.

...