java.lang.UnsatisfiedLinkError:org.opencv.core.Mat.n_Mat(III)J?

时间:2017-03-03 01:38:07

标签: java eclipse opencv

我一直在努力让opencv在我们的覆盆子pi中工作,但我根本无法让它工作。我在OpenCV库中添加了一个新的eclipse项目,并粘贴了一些超级简单的代码。

function DOMIterate($node)
{
    yield $node;
    if ($node->hasChildNodes())
    {
        foreach ($node->childNodes as $subnode) {
            // if($subnode != null) {
                DOMIterate($subnode);
            // }
        }
    }
}

但我收到错误:

  

java.lang.UnsatisfiedLinkError:org.opencv.core.Mat.n_Mat(III)J

无论如何都要解决这个错误?我没有想法。

3 个答案:

答案 0 :(得分:0)

您可以像这样加载库:首先调用此方法

public static void loadOpenCV_Lib() throws Exception {
    // get the model
    String model = System.getProperty("sun.arch.data.model");
    // the path the .dll lib location
    String libraryPath = "C:/opencv/build/java/x86/";
    // check for if system is 64 or 32
    if(model.equals("64")) {
        libraryPath = "C:/opencv/build/java/x64/";
    }
    // set the path
    System.setProperty("java.library.path", libraryPath);
    Field sysPath = ClassLoader.class.getDeclaredField("sys_paths");
    sysPath.setAccessible(true);
    sysPath.set(null, null);
    // load the lib
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

注意:在上面的代码中,OpenCV已在C盘根文件夹中解压缩。

编辑:在Eclipse中,您也可以这样做:右键单击项目 - > 构建路径 - > 配置构建路径 - > 库(选项卡) - > 扩展OpenCV jar - > 原生库位置: - &gt ; Eidt - > 放这个; C:/opencv/build/java/x64/ - > 确定 - > 应用...

答案 1 :(得分:0)

我在Linux上遇到过这个问题,并花了一些时间来解决这个问题。首先,要回答上面的GuyWhoCodes,build文件夹中没有java文件夹。 This java intro opencv document讲述如何在Linux上进行构建,并说

  

将创建一个包含Java接口的jar(bin / opencv-244.jar)和一个包含Java绑定和所有OpenCV内容的本机动态库(分别为lib / libopencv_java244.so或bin / Release / opencv_java244.dll)< / p>

所以在你做cmake和make之后,jar就在bin文件夹中,本机库在lib文件夹中。

其次,我最初遵循this opencv Installation in Linux document进行Linux构建,并建议(在步骤5中)在执行java构建时取消设置BUILD_EXAMPLES,BUILD_TESTS,BUILD_PERF_TESTS。我找到的是取消设置这些似乎是我的原因&#34; java.lang.UnsatisfiedLinkError:org.opencv.core.Mat.n_Mat(III)J&#34;

一旦我基于first link进行了构建,并且只取消了BUILD_SHARED_LIBS选项,我就不再获得UnsatisfiedLinkError并且测试工作正常。我还没有充分发挥它的作用,弄清楚我未解决的问题是导致问题的原因,但对于任何倾向于此的人来说,这应该是一个简单的试错过程。

答案 2 :(得分:0)

您获得的错误意味着尚未链接/加载本机OpenCV文件。

  System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

您正在使用的上述代码行仅在指定的OpenCV本机文件驻留在Java库路径中时才有效。

你确定OpenCV文件在那里吗?我建议尝试通过提供完整路径来加载OpenCV本机,只是为了查看问题所在。

System.load("fullPathTo/opencv.dll");

我还建议您查看这篇文章,详细解释所有这些内容。 https://stackoverflow.com/a/47718273/5165833