3

我正在组合一个 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

4 回答 4

3

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

B) 如果您不提供库的绝对路径,您可以通过指定来告诉它在何处加载 DLL jna.library.path,或使其可用java.library.path(在NativeLibraryjavadoc中描述了其他选项)。

于 2013-04-24T12:50:17.937 回答
2

您应该向 JVM 显示您的 dll 位置。可以用-Djava.library.path=pathToDllVM 参数来完成

于 2013-04-24T06:53:49.407 回答
1

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

于 2013-05-23T10:59:37.247 回答
0

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

于 2017-06-10T13:37:05.493 回答