我通过netbeans构建了一个jar,指定了我的主类和库。在属性部分,我在库部分中有库,我已经设置了
-Djava.library.path=/path/to/lib
在“运行”部分中。但是,当我使用
通过命令行运行jar文件时java -jar
它返回错误
java.lang.UnsatisfiedLinkError: no libName in java.library.path
在我的jar文件所在的目录中有一个lib目录,其中包含库,jar中的manifest文件包含
Class-Path: lib/libName.jar
我的jar文件出了什么问题?
答案 0 :(得分:1)
java.library.path
不用于加载jar
- 文件,而是用于加载由例如{em}使用的 native 库。 JNI。从错误消息看,您的应用程序似乎正在调用System.loadLibrary("libName")
,因此您的系统正在寻找libName.dll
(在Windows上)或libName.so
(在Unix上),而不是那里。
如果您只在libName.jar
中有一些课程,则不需要System.loadLibrary()
或java.library.path
- 只需在课程路径中包含libName.jar
,java就会找到所需的一切
如果libName.jar
包含您要使用的本机库:没有直接的方法可以在dll
内加载so
或jar
,而无需先解压缩它们,所以最简单的方法是将jar中的本机库作为额外文件放在/lib
目录中。还有一些库允许您在jar中使用本机库 - 有关详细信息,请参阅this question。