JNA java.lang.UnsatisfiedLinkError和找不到指定的模块

时间:2013-04-24 06:50:01

标签: java java-native-interface native jna

我正在组装一个jar,它会让我调用仅对本机可用的命令(jar使用本机而不是实际程序)。每当我加载DLL时,我遇到了一个问题。这是错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'myDLL.dll': The specified module could not be found.

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:283)
at com.sun.jna.Library$Handler.<init>(Library.java:142)
at com.sun.jna.Native.loadLibrary(Native.java:368)
at com.sun.jna.Native.loadLibrary(Native.java:353)
at src.NativeBridgeJar.<clinit>(NativeBridgeJar.java:6)
at src.Main.main(Main.java:6)

我不知道为什么会出现这种错误的原因。我确保将本机库路径设置为具有本机的文件夹。有没有人有想法?先谢谢!

4 个答案:

答案 0 :(得分:3)

A)当你拨打Native.loadLibrary()时,你可以提供简写名称(“myDll”),文件名(“myDll.dll”)或共享库的绝对路径(“c:/ users /me/myDll.dll“)。

B)如果您没有提供库的绝对路径,您可以通过指定jna.library.path或在java.library.path上使用它来告诉它加载DLL的位置(还有其他选项)在NativeLibrary javadoc)中描述。

答案 1 :(得分:2)

您应该向JVM显示您的dll位置。可以使用-Djava.library.path=pathToDll VM参数

来完成

答案 2 :(得分:1)

我遇到了同样的问题,直到我将.dll文件放入C:\ Windows \ System32,因为它是一个C ++ DLL并且依赖于该文件夹中的Kernel32.dll和MSVCR100.dll。这似乎有效。

答案 3 :(得分:0)

除了使用-Djava.library.path=pathToDllSystem.setProperty("jna.library.path","pathToDll");设置dll的路径之外,还要确保在Windows中安装了特定的Visual C ++ xxxx Redistributable Package(bcs应该使用特定的VisualStudio构建Windows本机库) xxxx)