我从NetBeans项目教程导致异常:
异常线程“main” java.lang.UnsatisfiedLinkError: Unable to load library
“simpleDLL”:指定的模块找不到。
试图把simpleDLL.dll在项目库,复制的文件在system32文件夹下,但没有成功。
我从NetBeans项目教程导致异常:
异常线程“main” java.lang.UnsatisfiedLinkError: Unable to load library
“simpleDLL”:指定的模块找不到。
试图把simpleDLL.dll在项目库,复制的文件在system32文件夹下,但没有成功。
我加载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”);
它的工作对我来说,尝试一下,告诉我,如果你的作品。
请检查simpleDLL是32位或64位。 然后检查,如果该JVM也32或64位。 他们必须在同一平台。
你也可以指定一个绝对路径,如果你改变loadLibrary()
来load()
http://www.chilkatsoft.com/p/p_499.asp
我只能在32位(XP)上运行。
放置DLL文件夹中的 “C:\ Windows \ System32下”
helloWorldDLL LIB =(helloWorldDLL)Native.loadLibrary( “helloworldDLL”,helloWorldDLL.class);
如果错误java.lang.UnsatisfiedLinkError中:无法加载库”依旧,使用的Dependency Walker来查看相关的DLL。
的Dependency Walker
针对此问题的三个可能的原因,如果DLL文件未破:
32位的64位兼容性。 32位DLL只能在32位JDK或JRE运行。 通过使用Cygwin的命令file <filename>
可以告诉我们,如果一个dll为32位或64位。
dll是不正确的路径lacated,所以Java无法找到它。 一般来说,我们可以用比其他一些绝对路径System32
,确保路径是正确的。
我们正在加载的dll需要其他DLL。
我们如何处理第三可能性:
使用JNI的System.loadLibrary()
mthod可以给我更多的提示,与JNA比较。 它可以说是这样的: Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries.
这意味着一些图书馆MyLibrary.dll
取决于丢失。 通过使用Dependency Walker中我们可以告诉需要什么样的DLL。
通过加载我们想要加载DLL之前这些DLL,就可以解决这个问题。
有同样的问题,甚至如果DLL文件名有大写字母某种原因,你必须全部使用小写字母像这样加载它: Native.loadLibrary("dlls/library.dll", YourInterface.class)
不是这个: Native.loadLibrary("dlls/Library.dll", YourInterface.class)