我有一个带有两个外部库的 Java 项目。 Eclipse 中一切运行良好,导出为可运行 JAR 时没有错误。但是,当我使用 java -jar myapplication.jar,
通过命令行运行我的项目时它抛出了臭名昭著的java.lang.UnsatisfiedLinkError: no in java.library.path
.
我尝试使用所有三个导出选项(提取、打包、复制),但没有成功。
(使用eclipse)
最佳答案
为了让 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。如果它说的是这样的:
线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有foo 那么它在您的 PATH 或 java.library.path 中找不到 foo 库 (foo.dll)。如果它说的是这样的:
线程“main”中出现异常 java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()V 那么库本身就有问题,因为 Java 无法将应用程序中的 native Java 函数映射到其实际的 native 对应项。
首先,我会在您的 System.loadLibrary() 调用周围放置一些日志记录,以查看其是否正确执行。如果它抛出异常或者不在实际执行的代码路径中,那么您将始终得到上面解释的后一种类型的 UnsatisfiedLinkError。
作为旁注,大多数人将 loadLibrary() 调用放入具有 native 方法的类中的静态初始化 block 中,以确保它始终只执行一次:
关于java - Eclipse 导出的 Runnable Jar 无法找到外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742601/