如何在我的 Web 应用程序中加载自定义 dll 文件?我试过以下方法:
- 将所有必需的 dll 复制到
system32
文件夹中,并尝试在Servlet
构造函数System.loadLibrary
中加载其中之一 - 将所需的 dll 复制到
tomcat_home/shared/lib
和tomcat_home/common/lib
所有这些dll都在网络应用程序的 WEB-INF/lib
中
原文由 Ketan Khairnar 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了
System.loadLibrary()
工作,库(在 Windows 上,一个 DLL)必须位于您的PATH
或java.library.path
中列出的路径中的某个目录中---
系统属性(因此您可以像java -Djava.library.path=/path/to/dir
一样启动 Java)。此外,对于
loadLibrary()
,您指定库的基本名称,末尾没有.dll
。因此,对于/path/to/something.dll
,您只需使用System.loadLibrary("something")
。您还需要查看确切的
UnsatisfiedLinkError
您得到的。如果它说类似的话:然后它在您的
PATH
或java.library.path
中找不到 foo 库 (foo.dll)。如果它说类似的话:那么库本身就有问题,因为 Java 无法将应用程序中的本机 Java 函数映射到其实际的本机对应函数。
首先,我会围绕您的
System.loadLibrary()
调用进行一些记录,以查看它是否正确执行。如果它抛出异常或不在实际执行的代码路径中,那么您将始终得到后一种类型UnsatisfiedLinkError
上面解释过。作为旁注,大多数人将他们的
loadLibrary()
调用放入带有本机方法的类中的静态初始化程序块中,以确保它始终恰好执行一次: