JNA:在编译的jar中找不到指定的模块

时间:2018-11-26 15:31:48

标签: java c++ dll java-native-interface jna

我的java Spring Boot项目中有一个C ++ .dll。 一切看起来不错,并且在以下情况下调用.dll中的方法:

  1. 我从IDE运行应用程序
  2. 我使用mvn pack & java -jar target/Project-0.0.1-SNAPSHOT.jar编译文件

我试图将项目复制到另一台机器上,但出现此问题:

  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 Redistributable。

如果我将.dll文件移动到项目根目录中,它将起作用。

1 个答案:

答案 0 :(得分:0)

您正在项目内部使用JNA。 JNA需要正确安装一些本机库。例如。 Windows平台需要jnidispatch.dll

对于您的情况,您需要下载所需的本机库,例如https://github.com/java-native-access/jna/blob/master/lib/native/win32,并将其放到您的JAVA可以在其中搜索的目录中。