2013-01-11 44 views
8

我从tutorial NetBeans项目导致异常:线程“main” java.lang.UnsatisfiedLinkError: Unable to load library“simpleDLL”试图从Java(JNA)使用DLL。无法加载库例外

异常:指定的模块找不到。

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

+2

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

+0

试图用另一个DLL和JNI,似乎它的工作原理 – Karloss

回答

11

我有完全一样的问题,加载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”);

它为我工作,尝试它,并告诉我,如果它适合你。

+0

我在'public static void main(String [] args){'后使用了此代码。我的图书馆位于user.dir。相同的结果 - 异常 – Karloss

+0

'线程中的异常“main”java.lang.UnsatisfiedLinkError:C:\ Windows \ System32 \ simpleDLL.dll:找不到依赖库“ – Karloss

+0

它不在你的user.dir中,user.dir是java程序所在的路径,除非你找到它在C:\ Windows \ System32 \你没有你的dll在user.dir – BackSlash

5

请检查simpleDLL是32位还是64位。然后检查JVM是否也是32位或64位。他们必须为同一个平台。

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

+0

谢谢你sponse! 用Cygwin命令“file”检查了simpleDLL,这个dll是32位的,我也有32位的机器。 – Karloss

+0

以绝对路径尝试获得相同的结果 – Karloss

2

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

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

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

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

Dependency Walker