12

我有教程 中的 NetBeans 项目导致异常:

线程“main” java.lang.UnsatisfiedLinkError: Unable to load library “simpleDLL”中的异常:找不到指定的模块。

试图将 simpleDLL.dll 放入项目库中,将文件复制到 system32 文件夹中,但没有成功。

4

5 回答 5

12

我在加载 DLL 时遇到了完全相同的问题,我以这种方式解决了它:

  • 正如 Christian Kuetbach 所说,检查您使用的 simpleDLL 是否与您的处理器架构兼容,32 位 DLL 无法在 64 位机器上运行,64 位 DLL 也无法在 32-位机。

  • 如果 DLL 是兼容的,那么问题可能出在您的 java 库路径中。我将我的 DLL 放入user.dir目录中,然后使用以下代码:

    将 Java 库路径设置为user.dir或您想要的另一个路径:

     String myLibraryPath = System.getProperty("user.dir");//or another absolute or relative path
    
     System.setProperty("java.library.path", myLibraryPath);
    

    加载库:

     System.loadLibrary("libraryWithoutDLLExtension");
    

它对我有用,试一试并告诉我它是否对你有用。

于 2013-01-12T00:01:56.747 回答
5

请检查 simpleDLL 是 32 位还是 64 位。然后检查 JVM 是 32 位还是 64 位。它们必须用于同一个平台。

您也可以指定绝对路径,如果您更改loadLibrary()load(): http: //www.chilkatsoft.com/p/p_499.asp

于 2013-01-11T22:51:00.090 回答
2

我只能在 32 位 (Xp) 中运行。

将 DLL 放在文件夹“c:\Windows\System32”中

helloWorldDLL lib = (helloWorldDLL) Native.loadLibrary("helloworldDLL", helloWorldDLL.class);

如果错误 java.lang.UnsatisfiedLinkError: Unable to load library" 仍然存在,请使用 Dependency Walker 查看依赖的 DLL。

依赖步行者

于 2014-09-25T20:49:48.010 回答
1

如果 dll 文件未损坏,则此问题的三个可能原因:

  1. 32 位 64 位兼容性。32 位 dll 只能在 32 位 jdk 或 jre 上运行。通过使用 Cygwin 命令file <filename>,我们可以判断 dll 是 32 位还是 64 位。

  2. dll 没有放在正确的路径中,因此 java 无法找到它。一般来说,我们可以使用一些绝对路径,而不是System32确保路径是正确的。

  3. 我们正在加载的 dll 需要其他 dll。

我们如何处理第三种可能性:

  1. System.loadLibrary()与 JNA 相比,使用 JNI 的方法可以给我更多的提示。它可能会这样说:这意味着缺少Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries. 某些库依赖。MyLibrary.dll通过使用依赖遍历器 ,我们可以知道需要哪些 dll。

  2. 通过在我们要加载的dll之前加载这些dll,我们可以解决这个问题。

于 2018-12-04T01:18:48.973 回答
0

有同样的问题,出于某种原因,即使 dll 文件名有大写字母,您也必须使用所有小写字母来加载它,如下所示: Native.loadLibrary("dlls/library.dll", YourInterface.class)

不是这个:Native.loadLibrary("dlls/Library.dll", YourInterface.class)

于 2019-04-23T17:41:27.413 回答