Tomcat中带有OpenCV的UnsatisfiedLinkError

首先,我有一个在主要方法中运行的OpenCV的基本示例。但是,如果我在Spring Web Controller中使用OpenCV,则会引发错误。

在STS(Spring Tool Suite)的

服务器中运行以下代码时,出现UnsatisfiedLinkError异常,并将问题归结为以下代码:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

CascadeClassifier cascadeClassifier = new CascadeClassifier();

服务器和“主”应用程序的运行配置都包含指向OpenCV DLL的VM参数:

-Djava.library.path="C:\opencv\build\java\x64;C:\opencv\build\x64\vc10\bin"

作为参考,我还包括了以下stacktrace的相关位:

org.springframework.web.util.NestedServletException: Handler processing failed;

nested exception is

java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0()J

...

Caused by: java.lang.UnsatisfiedLinkError:

org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0()J

at org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0(Native Method)

at org.opencv.objdetect.CascadeClassifier.<init>(CascadeClassifier.java:38)

at com.immersion.test.controllers.SimpleController.createClassifier(SimpleController.java:19)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

注意:我已经阅读了几个线程,指出UnsatisfiedLinkError的主要原因是缺少System.loadLibrary(Core.NATIVE_LIBRARY_NAME)呼叫。显然这里不是这种情况,因为它是在引发异常的上方调用的。

回答:

事实证明,在STS / Eclipse中启动Tomcat服务器的默认

实际上只是Tomcat的启动器。这意味着添加到Tomcat“运行配置”的任何VM Args都不会传输到实际的Tomcat实例。

tcruntime-instance.batTomcat目录中进行查找 (这最终创建了tomcat Java实例),我们可以看到,只需将所需的VMArgs添加到JAVA_OPTS环境变量中,这些dll将可用于Tomcat。

因此,只需将OpenCV二进制文件的位置添加到您的JAVA_OPTS环境变量中:

-Djava.library.path="C:\opencv\build\java\x64;C:\opencv\build\x64\vc10\bin"

以上是 Tomcat中带有OpenCV的UnsatisfiedLinkError 的全部内容, 来源链接: utcz.com/qa/416528.html

回到顶部