如何使用JNA

问题描述

我正在尝试使用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's CLP解算器。如前所述,我自己使用MSYS2(64位)和COIN-OR的coinbrewscript对其进行了编译。随后,我使用dependencies来验证是否满足所有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,依此类推。我试图加载除su dependencies以外的system32 dll之外没有其他依赖项的dll,尽管即使这样也不会加载。为了使这项工作有效,我应该改变什么?

已安装Microsoft c ++可再发行组件,并且所有dll都是可执行文件,请参见this stackoverflow question

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)