我有一个带有两个外部库的Java项目。在Eclipse中运行良好,导出为可运行的JAR时没有错误。但是,当我使用java -jar myapplication.jar,
通过命令行运行我的项目时,它会引发臭名昭着的java.lang.UnsatisfiedLinkError: no in java.library.path
。
我尝试过使用所有三种导出选项(提取,打包,复制)但没有成功。
(使用eclipse)
答案 0 :(得分:1)
为了使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。如果它说的话:
线程“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无法将应用程序中的本机Java函数映射到实际的本地Java函数。
首先,我会在您的System.loadLibrary()调用周围进行一些日志记录,以查看是否正确执行。如果它抛出异常或者不在实际执行的代码路径中,那么你将总是得到上面解释的后一种类型的UnsatisfiedLinkError。
作为旁注,大多数人使用本机方法将loadLibrary()调用放入类中的静态初始化块,以确保它始终只执行一次: