什么是UnsatisfiedLinkError的原因?

11

当我尝试运行我的程序时,它会给出以下错误

       Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob-1.14.3-x86 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.jacob.com.LibraryLoader.loadJacobLibrary(LibraryLoader.java:184)
at com.jacob.com.JacobObject.<clinit>(JacobObject.java:108)
at javaSMSTest.main(javaSMSTest.java:18)

请帮忙


请更改您的标题,使其更加明确。 - chburd
1
你能附上你的代码吗?尤其是LibraryLoader.loadJacobLibrary()部分。 - Péter Török
3个回答

22

从Javadoc获取的信息:

如果Java虚拟机无法找到声明为native的方法的适当本地语言定义,则抛出此异常。

这是与JNI相关的错误。loadJacobLibrary尝试加载名为jacob-1.14.3-x86的本地库,但在java.library.path定义的路径中找不到它。当您启动JVM时,应将此路径定义为系统属性。例如:

-Djava.library.path=<dir where jacob library is>

在Windows上,实际的本地库文件名将被称为jacob-1.14.3-x86.dll,而在Linux上它将被称为libjacob-1.14.3-x86.so。


那不应该叫做libjacob-1.14.3-x86.so吗? - Miguel Ping
我想补充一点,路径不应该以斜杠/反斜杠结尾 - 只需以目录名称结尾(哦天啊,我犯了这个错误)。 - hello_earth

2
引用自http://www.velocityreviews.com/forums/t143642-jni-unsatisfied-link-error-but-the-method-name-is-correct.html

UnsatisfiedLinkError有两种情况,一种是System.loadLibrary()无法加载库,另一种是JVM在库中未找到特定方法。错误消息本身的文本将指示哪种情况...

你所描述的错误明显无法找到库。正如其他人所说,将其包含在Java库路径中。

另一种错误——当可以找到库但无法找到库中的方法时——如下所示:

java.lang.UnsatisfiedLinkError: myObject.method([Ljava/lang/Object;)V

在这种情况下,您可能方法名称错误,或者需要返回并添加该方法并重新编译代码...


2
您需要将jacob-1.14.3-x86库添加到您的Java库路径中。
在Windows上,这将是jacob-1.14.3-x86.dll。
这是一个二进制文件,用于Java运行本地方法。它可能是您正在使用的某个库(jar)所需的。
这里,您不仅可以看到一个jar文件,还可以找到该jar文件所需的二进制文件。请选择适合您平台的那个文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接