我正在组装一个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)
我不知道为什么会出现这种错误的原因。我确保将本机库路径设置为具有本机的文件夹。有没有人有想法?先谢谢!
答案 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=pathToDll
或System.setProperty("jna.library.path","pathToDll");
设置dll的路径之外,还要确保在Windows中安装了特定的Visual C ++ xxxx Redistributable Package(bcs应该使用特定的VisualStudio构建Windows本机库) xxxx)