首页 > 解决方案 > 如何使用 JNA 导入依赖于 Java 中其他 dll 的 dll

问题描述

我正在尝试使用 JNA 在 java (java 11) 中导入 .dll。我自己编译了 dll(使用 mingw64),验证它们是 64 位的,并确保所有依赖项(即链接的 dll)在同一路径中可用。但是,我仍然收到以下错误消息。我究竟做错了什么?

java.lang.UnsatisfiedLinkError: Unable to load library 'libClp-0':
The specified module could not be found.

The specified module could not be found.

The specified module could not be found.

Native library (win32-x86-64/libClp-0.dll) not found in resource path

dll 的关于COIN-OR 的 CLP求解器。如前所述,我自己使用 MSYS2(64 位)和 COIN-OR 的 coinbrewscript 编译了它们。我随后使用依赖项来验证是否满足所有 dll 依赖项(必须从 "C:\msys64\mingw64\bin" 复制一些 dll,因为它们也被引用)。

我在 Eclipse 中的文件夹结构如下:

src 
 |  |clpsolver.model
 |  |     |CLPDLLInterface.java
lib
    | x64
           | all dlls

在 CLPDLLInterface.java 文件中,我使用 JNA 作为:

  String libSubDir = "lib" + File.separator + "x64";
  String dir = JNAPathHelper.addPluginRootToNativePath(CLPDLLInterface.class, libSubDir);
  if (dir == null) {
    System.loadLibrary("libClp-0.dll");
  }
  Native.register("libClp-0.dll");
}

libClp-0.dll 依赖于其他 dll,依此类推。我试图加载除了 system32 dlls 起诉依赖项之外没有其他依赖项的 dll ,尽管即使那个也不会加载。我应该改变什么才能使这项工作?

Microsoft c++ redistributable 已安装,并且所有 dll 都是可执行的,请参阅这个 stackoverflow 问题

标签: javadlljava-native-interfacedllimportjna

解决方案


推荐阅读