【问题标题】:Spring boot with OpenCV使用 OpenCV 进行春季启动
【发布时间】:2016-05-08 07:10:42
【问题描述】:

我正在尝试在部署到 Tomcat 服务器的 Spring Boot 项目中使用 OpenCV 作为 war 文件。

无论我尝试什么,我都会得到这个:

java.lang.UnsatisfiedLinkError: no opencv_java310 in java.library.path

我有一个经典的 maven 项目,我在其中测试了 OpenCV 代码,只要我将 opencv_java310 放在项目类路径中,它就可以正常工作。我做了同样的事情,并将这个 jar 添加到我的 Spring boot 项目的类路径中,我还将它添加到 src/main/webapp/WEB-INF/lib 目录中(为了使其在应用程序服务器中可用)。

在 Tomcat 上使用 OpenCV 还需要做什么?我已经走投无路了..

编辑:在 Junit 测试中加载 open-cv 核心库时,它会正确加载:

@Test
  public void testOpenCV() {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  }

但是如果我在 Tomcat 上运行应用程序时做同样的事情,我会得到异常。

【问题讨论】:

  • 关于上述答案的 cmets,您使用的是 Unix,并且您有一个 .so 文件。在运行 tomcat -Djava.library.path=/home/smajl/Software/opencv/build/lib 时尝试添加此参数(将其添加到启动配置中)。
  • 我尝试使用以下 VM 参数运行 Tomcat:-Djava.library.path=/home/smajl/Software/opencv/build/lib/libopencv_java310.so(这是最接近的 .so 文件我找到了)但异常仍然存在......
  • 改用-Djava.library.path=/home/smajl/Software/opencv/build/lib。使用您提供的值,它可能正在寻找/home/smajl/Software/opencv/build/lib/libopencv_java310.so/libopencv_java310.so...
  • 你是对的,这修复了设置。非常感谢!
  • 路径中不要指定.so文件,要加载整个文件夹。按照我的说明直接使用 -Djava.library.path=/home/smajl/Software/opencv/build/lib/ 尝试。

标签: java spring maven opencv tomcat


【解决方案1】:

这不是在谈论 JAR 文件 - 看起来 JAR 文件正在正确加载。但是,从错误消息看来,OpenCV 使用了一个或多个本机库(例如 .dlllib*.so 文件),并且找不到这些。

预计属性java.library.path 将指向包含本机库opencv_java310 的位置,但事实并非如此。我不是 100% 确定如何使用 Eclipse 和 Tomcat 来解决这个问题,但您可能需要找到一种方法来 (a) 在 Tomcat 上设置属性,或者 (b) 查看属性的值并放置本机该位置的库(您可以使用System.getProperty("java.library.path"); 获取它)。快速检查表明您可以将其放入tomcat/shared/lib

请记住,这是 .dll(适用于 Windows)或 .so(适用于 OSX、Linux、Unix)文件,而不是 JAR 文件。

【讨论】:

  • 我打印了 java-library-path,结果如下: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 怎么能我用那个找到文件?很抱歉这个愚蠢的问题,但我现在真的很困惑
  • 编辑:我还有一个运行良好的 maven 项目。所以不明白为什么配置一模一样的Spring boot项目突然出现这个问题
  • 这肯定有点奇怪。如果可以,请检查工作项目和非工作项目中的值,看看是否有区别。由于您似乎在 OSX 或 Linux 上,它可能会在以下位置之一查找名为 libopencv_java310.so 的文件:/usr/java/packages/lib/amd64/usr/lib64/lib64/lib/usr/lib。还有其他一些可能性,但我想说,从这里开始。
  • 这很奇怪,junit测试运行时java库路径的输出与运行时完全不同:/home/smajl/Software/opencv/build/lib:/home/smajl/软件/opencv/build/lib
  • 好的,这看起来很有希望。我毫不怀疑其中一个文件夹包含我们正在寻找的文件。下一步是 (A) 将该文件添加到上述文件夹之一,或 (B) 更改 Tomcat 的配置,使其在这些文件夹中查找本机库。
猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2017-06-18
  • 2017-12-04
  • 2021-11-13
相关资源
最近更新 更多