gpt4 book ai didi

java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

转载 作者:IT老高 更新时间:2023-10-28 11:36:33 25 4
gpt4 key购买 nike

如何在我的 Web 应用程序中加载自定义 dll 文件?我尝试了以下方法:

  • 复制 system32 文件夹中所有需要的 dll 并尝试在 Servlet 构造函数 System.loadLibrary
  • 中加载其中一个
  • 将所需的 dll 复制到 tomcat_home/shared/libtomcat_home/common/lib

所有这些 dll 都在 web-application 的 WEB-INF/lib

最佳答案

为了使 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。如果它说类似:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no foo in java.library.path

那么它在您的 PATHjava.library.path 中找不到 foo 库 (foo.dll)。如果它说类似:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()V

那么库本身就有问题,因为 Java 无法将应用程序中的 native Java 函数映射到其实际的 native 对应项。

首先,我会在您的 System.loadLibrary() 调用周围放置一些日志,以查看它是否正确执行。如果它抛出异常或不在实际执行的代码路径中,那么您将始终得到上述 UnsatisfiedLinkError 的后一种类型。

作为旁注,大多数人将他们的 loadLibrary() 调用放入具有本地方法的类中的静态初始化程序 block 中,以确保它始终只执行一次:

class Foo {

static {
System.loadLibrary('foo');
}

public Foo() {
}

}

关于java.lang.UnsatisfiedLinkError no *****.dll in java.library.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com