尝试使用DLL从Java(JNA)。 无法加载库例外(Trying to use DLL fro

2019-07-18 03:18发布

我从NetBeans项目教程导致异常:

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

试图把simpleDLL.dll在项目库,复制的文件在system32文件夹下,但没有成功。

Answer 1:

我加载DLL有完全相同的问题,我解决它以这种方式:

  • 基督教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”);

它的工作对我来说,尝试一下,告诉我,如果你的作品。



Answer 2:

请检查simpleDLL是32位或64位。 然后检查,如果该JVM也32或64位。 他们必须在同一平台。

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



Answer 3:

我只能在32位(XP)上运行。

放置DLL文件夹中的 “C:\ Windows \ System32下”

helloWorldDLL LIB =(helloWorldDLL)Native.loadLibrary( “helloworldDLL”,helloWorldDLL.class);

如果错误java.lang.UnsatisfiedLinkError中:无法加载库”依旧,使用的Dependency Walker来查看相关的DLL。

的Dependency Walker



Answer 4:

针对此问题的三个可能的原因,如果DLL文件未破:

  1. 32位的64位兼容性。 32位DLL只能在32位JDK或JRE运行。 通过使用Cygwin的命令file <filename>可以告诉我们,如果一个dll为32位或64位。

  2. dll是不正确的路径lacated,所以Java无法找到它。 一般来说,我们可以用比其他一些绝对路径System32 ,确保路径是正确的。

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

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

  1. 使用JNI的System.loadLibrary() mthod可以给我更多的提示,与JNA比较。 它可以说是这样的: Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries. 这意味着一些图书馆MyLibrary.dll取决于丢失。 通过使用Dependency Walker中我们可以告诉需要什么样的DLL。

  2. 通过加载我们想要加载DLL之前这些DLL,就可以解决这个问题。



Answer 5:

有同样的问题,甚至如果DLL文件名有大写字母某种原因,你必须全部使用小写字母像这样加载它: Native.loadLibrary("dlls/library.dll", YourInterface.class)

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



文章来源: Trying to use DLL from Java (JNA). Unable to load library exception
标签: java dll jna