UnsatisfiedLinkError的原因是什么?

时间:2010-03-15 10:37:58

标签: java

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

       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)

请帮助

3 个答案:

答案 0 :(得分:21)

来自Javadoc:

  

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

这是与JNI相关的错误。 loadJacobLibrary正在尝试加载名为jacob-1.14.3-x86的本机库,并且在java.library.path定义的路径上找不到它。启动JVM时,应将此路径定义为系统属性。 e.g。

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

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

答案 1 :(得分:1)

您需要在java库路径上使用jacob-1.14.3-x86库。

在Windows上,这将是jacob-1.14.3-x86.dll。

这是一个二进制文件,java用它来运行本机方法。你正在使用的某些库(jar)可能需要它。

here中,您不仅可以看到jar,还可以看到jar所需的二进制文件。选择适合您平台的那个。

答案 2 :(得分:0)

引用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

在这种情况下,您要么使用了错误的方法名称,要么必须返回并添加方法并重新编译代码......