java.lang.UnsatisfiedLinkError: java.library.path 中没有 opencv_java2411

ale*_*oid 4 java eclipse opencv maven

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

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

我已将以下命令添加到 Eclipse VM 参数中:

-Djava.library.path="D:/Projects/lib/opencv/x86/opencv_java2411.dll"
Run Code Online (Sandbox Code Playgroud)

并得到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

我也试图java.library.path直接从我的代码访问:

System.out.println(System.getProperty("java.library.path"));
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么 ?

ips*_*psi 5

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


She*_*age 5

我也面临同样的问题,这样做我在下面解决了这个问题。当我运行 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
Run Code Online (Sandbox Code Playgroud)

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

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.loadLibrary("opencv_java320");
Run Code Online (Sandbox Code Playgroud)

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

nu.pattern.OpenCV.loadLocally();
Run Code Online (Sandbox Code Playgroud)

为了添加该行,您需要在 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>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

只需使用

OpenCV.loadShared(); // tested on opencv-4.5.1-2
Run Code Online (Sandbox Code Playgroud)

代替

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Run Code Online (Sandbox Code Playgroud)