当前位置: 首页 > 面试题库 >

Tomcat中的OpenCV出现UnsatisfiedLinkError

石正卿
2023-03-14
问题内容

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

在STS(Spring Tool Suite)的 Tomcat
服务器中运行以下代码时,出现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)

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


问题答案:

事实证明,在STS / Eclipse中启动Tomcat服务器的默认 运行配置
实质上只是Tomcat的启动器。这意味着添加到Tomcat“运行配置”的任何VM Args都不会传输到实际的Tomcat实例。

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

TL; DR:

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

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

有关为Tomcat设置JAVA_OPTS的更多信息,请参见此SO问题。



 类似资料:
  • 本文向大家介绍Python OpenCV实现图片上输出中文,包括了Python OpenCV实现图片上输出中文的使用技巧和注意事项,需要的朋友参考一下 OpenCV中在图片上输出中文一般需要借助FreeType库实现。FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件。但使用FreeType需要下载库并重新编译,过程麻烦一点。 在Pyth

  • 在Netbeans中,当我试图创建Java EE企业应用程序时,我在Netbeans中安装的Tomcat服务器不会出现在列表中,并显示错误。“没有 ;服务器在 ;IDE ;注册。 到 ;注册 ;服务器, 点击 ;”添加...“ 按钮。”我必须重新添加服务器,它说服务器已经注册,我做错了什么?

  • 我正在尝试在Windows 7上使用Cmake构建OpenCV。我选择使用Visual Studio 10编译器。 我收到以下错误: C:/程序文件 (x86)/CMake 2.8/共享/生成 2.8/模块/CMakeCXX 中的生成错误信息:37 (get_filename_component): get_filename_component调用不正确的参数数调用堆栈(最近的调用优先):CMak

  • 问题内容: 我有两个连接到我的笔记本电脑的网络摄像头(一个内置),两个都可以。(如果我使用的是Cheese,这是Ubuntu附带的一个网络摄像头,它将使用外部的)。如果我用 要么 我有内置的摄像头。如果我用 它不起作用,对象“ cap”显示为: 与CaptureFromCAM相同。所以我想知道openCV打算做什么,以及为什么它似乎不了解第二台摄像机。应该有两个可用的设备(两个都有/ dev /v

  • 你好,我被这个错误卡住了。我总是得到404错误,所有的stackoverflow主题没有帮助。

  • 我正在运行IIS 7.5和Tomcat 5.5,通过AJP连接器连接。我还在机器上配置了SiteMinder Web代理。 由于某些原因,Tomcat中没有出现SiteMinder头变量,如SM\u USER或SM\u USERDN。我没有在Tomcat日志或浏览器中通过类似于Fiddler的HTTP代理看到它们。有趣的是,它们确实通过遍历所有服务器变量显示在ASP页面上。如果我在IIS中登录Si