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.bat
Tomcat目录中进行查找 (这最终创建了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