【问题标题】:Java, OpenCV Exception in thread "main" java.lang.UnsatisfiedLinkError:Java,线程“main”中的 OpenCV 异常 java.lang.UnsatisfiedLinkError:
【发布时间】:2014-07-30 21:28:59
【问题描述】:

我正在尝试在 Windows 上将 OpenCV 2.4.9 与 Eclipse 一起使用。我在本教程中设置了 Eclipse http://docs.opencv.org/trunk/doc/tutorials/introduction/java_eclipse/java_eclipse.html,但是当我单击运行时,我收到了这条消息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: F:\opencv\build\java\x86\opencv_java249.dll: 
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(Unknown Source)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at pl.forbot.test.Hello.main(Hello.java:11)

代码:

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class Hello
{
   public static void main( String[] args )
   {
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
      System.out.println( "mat = " + mat.dump() );
   }
}

我只找到了类似“线程“主”java.lang.UnsatisfiedLinkError 中的异常:java.library.path 中没有 opencv_java246”之类的答案,但它没有用。我是 Java 新手,请帮帮我。

【问题讨论】:

  • F:\opencv\build\java\x86\opencv_java249.dll 存在吗?如果是,你的是 x86 java VM 吗? dll 必须遵循它所加载的 VM 的体系结构

标签: java opencv


【解决方案1】:

How to deal with the UnsatisfiedLinkError

首先我们要验证System.loadLibrary方法中传入的参数是否正确,并且该库确实存在。请注意,不需要扩展库。因此,如果您的库名为 SampleLibrary.dll,则必须将 SampleLibrary 值作为参数传递。

此外,如果您的应用程序已经加载了该库并且应用程序尝试再次加载它,JVM 将抛出 UnsatisfiedLinkError。此外,您必须验证本机库是否存在于 java.library.path 或应用程序的 PATH 环境库中。如果仍然找不到库,请尝试提供 System.loadLibrary 方法的绝对路径。

为了执行您的应用程序,请使用 -Djava.library.path 参数来明确指定本机库。例如,使用终端(Linux 或 Mac)或命令提示符 (Windows),通过发出以下命令来执行您的应用程序:

java -Djava.library.path= "<path_of_your_application>" –jar <ApplicationJAR.jar>

unsatisfiedLinkError 的一个例子

public class UnsatisfiedLinkErrorExample {

     // Define a method that is defined externally.
     native void CFunction();

     // Load an external library, called "clibrary".
     static {
          System.loadLibrary("clibrary");
     }

     public static void main(String argv[]) {
          UnsatisfiedLinkErrorExample example = new UnsatisfiedLinkErrorExample();
          example.CFunction ();
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多