库存在,与Java的架构相同,但我仍然得到Java.lang.UnsatifiedLink错误:无法加载库
我正在运行64个windows。我的java版本说:库存在,与Java的架构相同,但我仍然得到Java.lang.UnsatifiedLink错误:无法加载库,java,jna,Java,Jna,我正在运行64个windows。我的java版本说: java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode) 我的项目是在ApacheTomcat服务器上运行的GWT Spring项目,上面的java属性应用于服务器(据说这是为了澄清服务器没有意外地运行不同的java版本
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
我的项目是在ApacheTomcat服务器上运行的GWT Spring项目,上面的java属性应用于服务器(据说这是为了澄清服务器没有意外地运行不同的java版本)
在Java代码中,我使用System.getProperty(“sun.arch.data.model”)
来确定Java版本,并根据结果加载64位或32位dll。在特定情况下,我现在运行64位,因此需要64位dll文件。我将文件放置在以下位置:
D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib\MY_LIBRARYx64.dll
在java代码中,我使用以下函数加载库:
private void setLibraryPath_private(String libraryPath) {
// Some magic which doesn't work anyway
File path = new File(configService.getProjectPrefix() + libraryPath);
try {
// Get valid canonical path (special case of absolute path)
path = new File(path.getCanonicalPath());
// Check for readability of that location
if(!path.canRead())
throw new IOException("Cannot read from this file.");
}
catch(IOException e) {
logger.error("Invalid path to R220 library: "+path.getAbsolutePath(), e);
}
// Remember path as string
this.libraryPath = path.getAbsolutePath();
try {
// Load it
library =
(R220) Native.loadLibrary(path.getCanonicalPath(), R220.class);
}
catch(Throwable e) {
// TODO: After loading problem is solved, probably replace throw with the logging
//logger.error("Failed to load R220 library: "+path.getAbsolutePath(), e);
throw new IllegalArgumentException("Failed to load R220 library: "+path.getAbsolutePath(), e);
}
// I don't know what this is
library.initLogger(configService.getLog4cplusConfigFilePath());
}
但在我的日志中,我仍然得到错误:
[INFO ] 2015-09-21 15:52:26,038 cz.techsys.web.server.R220LibService - Running 64bit version of the native libary.
[ERROR] 2015-09-21 15:52:26,113 cz.techsys.web.server.R220LibService - Failed to load R220 library: D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib\MY_LIBRARYx64.dll
java.lang.UnsatisfiedLinkError: Unable to load library 'D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib\MY_LIBRARYx64.dll': The specified module could not be found.
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:379)
at com.sun.jna.Native.loadLibrary(Native.java:364)
不用说,这没有任何影响,除了错误消息现在稍微短了一点:
[WARN ] 2015-09-21 16:33:56,819 cz.techsys.web.server.R220LibService -
Lib path: D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib
Lib name:WebSightR220libx64
[ERROR] 2015-09-21 16:33:56,882 cz.techsys.web.server.R220LibService - Failed to load R220 library: D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib\WebSightR220libx64.dll
java.lang.UnsatisfiedLinkError: Unable to load library 'WebSightR220libx64': The specified module could not be found.
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
您已将
.dll
添加到库名称?库不在可访问位置,无法从WEB-INF/lib访问本地库;它们必须由本机链接器读取。LD_LIBRARY_路径或(在Windows上)路径。我不明白。为什么我不能在任何绝对路径上加载库?无论如何,我试过了——我使用了System.setProperty(“java.library.path”,dir)代码>和我传递的库名没有扩展名。它仍然不起作用。
[WARN ] 2015-09-21 16:33:56,819 cz.techsys.web.server.R220LibService -
Lib path: D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib
Lib name:WebSightR220libx64
[ERROR] 2015-09-21 16:33:56,882 cz.techsys.web.server.R220LibService - Failed to load R220 library: D:\programs\apache-tomcat-7.0.64-windows-x64\webapps\war\WEB-INF\lib\WebSightR220libx64.dll
java.lang.UnsatisfiedLinkError: Unable to load library 'WebSightR220libx64': The specified module could not be found.
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)