java.lang.UnsatisfiedLinkError no *****。dll在java.library.path中


Answers

在运行时更改'java.library.path'变量是不够的,因为它只能被JVM读取一次。 你必须重置它,如:

System.setProperty("java.library.path", path);
//set sys_paths to null
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);

请采取以下措施: 运行时更改Java库路径

Question

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

  • 复制system32文件夹中的所有必需的DLL,并尝试在Servlet构造函数System.loadLibrary加载其中的一个
  • tomcat_home/shared/libtomcat_home/common/lib复制必需的dll
  • 所有这些DLL都在WEB-INF/lib应用程序的WEB-INF/lib



对于那些正在查找java.lang.UnsatisfiedLinkError: no pdf_java in java.library.path

我面临同样的例外; 我尝试了一切和重要的事情,使其工作是:

  1. 正确版本的pdf lib.jar(在我的情况下,它是错误的版本jar保存在服务器运行时)
  2. 制作一个文件夹并将pdflib jar保存在其中,然后将该文件夹添加到PATH变量中

它与tomcat 6一起工作。




您可以使用System.load()提供您想要的绝对路径,而不是相应操作系统的标准库文件夹中的文件。

如果您想要本地应用程序已经存在,请使用System.loadLibrary(String filename) 。 如果你想提供你自己的,你可能更好的加载()。

你也应该能够在正确设置java.library.path使用loadLibrary 。 查看ClassLoader.java的实现源,显示两个路径被检查(OpenJDK)




我使用的是Mac OS X Yosemite和Netbeans 8.02,但遇到了同样的错误,我发现的简单解决方案与上述类似,当您需要将本地库包含在项目中时,这非常有用。 那么对Netbeans来说呢下一个呢:

1.- Right click on the Project
2.- Properties
3.- Click on RUN
4.- VM Options: java -Djava.library.path="your_path"
5.- for example in my case: java -Djava.library.path=</Users/Lexynux/NetBeansProjects/NAO/libs>
6.- Ok

我希望对某人有用。 我找到解决方案的链接在这里: java.library.path - 它是什么以及如何使用




如果你需要加载一个相对于你已经存在的目录的文件(比如在当前目录中),下面是一个简单的解决方案:

File f;

if (System.getProperty("sun.arch.data.model").equals("32")) {
    // 32-bit JVM
    f = new File("mylibfile32.so");
} else {
    // 64-bit JVM
    f = new File("mylibfile64.so");
}
System.load(f.getAbsolutePath());



Related