如何解决java.library.path中的java.lang.UnsatisfiedLinkError否*****dll
为了System.loadLibrary()
正常工作,该库(在Windows上为DLL)必须位于目录中PATH 或java.library.path
系统属性中列出的路径上的某个目录中(这样你就可以启动Java了java -Djava.library.path=/path/to/dir
)。
此外,对于loadLibrary()
,你可以指定库的基本名称,但.dll结尾不能带。因此,/path/to/something.dll
你只需使用System.loadLibrary("something")
。
你还需要查看所获得的确切信息UnsatisfiedLinkError
。如果显示类似以下内容:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no foo in java.library.path
那么它将无法在你的或中找到foo库(foo.dll
)。如果显示类似以下内容:PATHjava.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()V
则库本身有问题,因为Java无法将应用程序中的本机Java函数映射到其实际本机副本。
首先,我会在你的System.loadLibrary()
呼叫周围记录一些日志,以查看该呼叫是否正常执行。如果它引发异常或不在实际执行的代码路径中,那么你将始终得到UnsatisfiedLinkError
上面解释的后一种类型。
loadLibrary()
附带说明一下,大多数人使用本机方法将调用放入类中的静态初始化程序块中,以确保始终始终执行一次:
class Foo {
static {
System.loadLibrary('foo');
}
public Foo() {
}
}
解决方法
如何在我的Web应用程序中加载自定义dll文件?我尝试了以下方法,但失败了。
- 复制了
system32
文件夹中所有必需的dll,并尝试在Servlet
构造函数中加载其中一个System.loadLibrary
- 在
tomcat_home/shared/lib
和中复制了所需的dlltomcat_home/common/lib
- 所有这些dll都在
WEB-INF/libWeb
应用程序中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。