【问题标题】:java.lang.UnsatisfiedLinkError: no opencv_java2411 in java.library.pathjava.lang.UnsatisfiedLinkError:java.library.path 中没有 opencv_java2411
【发布时间】:2016-11-10 18:26:12
【问题描述】:

我正在尝试将 opencv 添加到我的 Spring Boot/Maven 项目中。

为了使用 opencv 库,我必须在 java.library.path 中提供本机库。

我在 Eclipse VM 参数中添加了以下命令:

-Djava.library.path="D:/Projects/lib/opencv/x86/opencv_java2411.dll"

并得到以下异常:

java.lang.UnsatisfiedLinkError: no opencv_java2411 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)

我也在尝试直接从我的代码访问java.library.path

System.out.println(System.getProperty("java.library.path"));

它显示提供的路径:D:/Projects/lib/opencv/x86/opencv_java2411.dll

我做错了什么?

【问题讨论】:

    标签: java eclipse maven opencv


    【解决方案1】:

    -Djava.library.path 不应指向 DLL,而应指向包含 DLL 的文件夹。例如-Djava.library.path=D:/Projects/lib/opencv/x86/

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题,所以我在下面解决了这个问题。当我运行 java -jar openCV=project jar 时,我得到了与下面相同的异常

      Exception in thread "main" java.lang.reflect.InvocationTargetException
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:498)
      at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
      Caused by: java.lang.UnsatisfiedLinkError: no opencv_java320 in java.library.path
      at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
      at java.lang.Runtime.loadLibrary0(Runtime.java:870)
      at java.lang.System.loadLibrary(System.java:1122)
      at com.wso2telco.rnd.CamCapture.<init>(CamCapture.java:47)
      at com.wso2telco.rnd.CamCapture.main(CamCapture.java:144)
      ... 5 more
      

      所以我做了以下更改 .java 类中的项目我有这行

      System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
      System.loadLibrary("opencv_java320");
      

      我删除了这两行并添加了以下行

      nu.pattern.OpenCV.loadLocally();
      

      为了添加该行,您需要在 pom.xml 中有这些依赖项

      <dependency>
      <groupId>org.openpnp</groupId>
      <artifactId>opencv</artifactId>
      <version>3.2.0-0</version>
      </dependency>
      <dependency>
      <groupId>nu.pattern</groupId>
      <artifactId>opencv</artifactId>
      <version>2.4.9-4</version>
      </dependency>
      

      完成上述修改后,我可以使用终端从终端运行我的程序 mvn exec:java -Dexec.mainClass="com.rnd.CamCapture"

      【讨论】:

        【解决方案3】:

        在windows上,设置包含opencv_java***.dll的环境路径

        e.x.
        {your OpenCV path}\opencv\build\java\x64
        or
        {your OpenCV path}\opencv\build\java\x86
        

        在 linux 或其他操作系统中相同。

        【讨论】:

          【解决方案4】:

          随便用

          OpenCV.loadShared(); // tested on opencv-4.5.1-2
          

          而不是

          System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
          

          【讨论】:

            猜你喜欢
            • 2018-06-19
            • 2020-06-29
            • 2017-06-27
            • 2016-08-29
            • 2012-07-16
            • 2020-05-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多