我有tutorial的NetBeans项目导致异常:
线程“main”java.lang.UnsatisfiedLinkError: Unable to load library
'simpleDLL'中的异常:找不到指定的模块。
试图将simpleDLL.dll放在项目库中,将文件复制到system32文件夹中但没有成功。
答案 0 :(得分:12)
我在加载DLL方面遇到了同样的问题,我用这种方式解决了这个问题:
如果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”);
它适用于我,尝试并告诉我它是否适合你。
答案 1 :(得分:5)
请检查simpleDLL是32位还是64位。然后检查,如果JVM也是32位或64位。他们必须是同一个平台。
如果您将loadLibrary()
更改为load()
,您还可以指定绝对路径:
http://www.chilkatsoft.com/p/p_499.asp
答案 2 :(得分:2)
我只能在32位(Xp)下运行。
将DLL放在文件夹" c:\ Windows \ System32"
中helloWorldDLL lib =(helloWorldDLL) Native.loadLibrary(" helloworldDLL",helloWorldDLL.class);
如果错误java.lang.UnsatisfiedLinkError:无法加载库"持久化,使用Dependency Walker查看依赖的DLL。
答案 3 :(得分:1)
如果dll文件未损坏,则可能出现此问题的三个原因:
32位64位兼容性。 32位dll只能在32位jdk或jre上运行。
通过使用Cygwin命令>>> class A:
>>> def __eq__(self, other):
>>> return True
>>>
>>> a = A()
>>> a == True
True
>>> a == False
True
>>> a == "foobar"
True
>>> a != "foobar"
True
,我们可以确定dll是32位还是64位。
dll没有正确的路径,因此java找不到它。一般来说,我们可以使用file <filename>
以外的其他绝对路径来确保路径正确。
我们正在加载的dll需要其他dll。
我们如何处理第三种可能性:
使用JNI的System32
方法可以给我更多提示。可能会说类似:System.loadLibrary()
这意味着缺少Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries.
个依赖的库。通过使用dependency walker,我们可以知道需要哪些dll。
通过在要加载的dll之前加载这些dll,我们可以解决此问题。
答案 4 :(得分:0)
有相同的问题,并且由于某些原因,即使dll文件名具有大写字母,也必须使用所有小写字母加载它,如下所示:
Native.loadLibrary("dlls/library.dll", YourInterface.class)
否:Native.loadLibrary("dlls/Library.dll", YourInterface.class)