【问题标题】:UnsatisfiedLinkError with OpenCV in TomcatTomcat中OpenCV的UnsatisfiedLinkError
【发布时间】:2017-05-15 19:08:55
【问题描述】:

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

Tomcat 服务器、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"

作为参考,我还在下面包含了堆栈跟踪的相关位:

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)

注意:我在 several StackOverflow 线程中读到 UnsatisfiedLinkError 的主要原因是缺少 System.loadLibrary(Core.NATIVE_LIBRARY_NAME) 调用。这显然不是这里的情况,因为它是在抛出异常的上方被调用的。

【问题讨论】:

    标签: java tomcat opencv java-native-interface spring-tool-suite


    【解决方案1】:

    这里也一样。

    我尝试了 Dylan 所说的,但在这里没有用。

    但我在 PATH 变量中添加了“C:\opencv\build\java\x64;C:\opencv\build\x64\vc10\bin”。在我的 sys 变量上。

    ps:我用的是windows。

    【讨论】:

      【解决方案2】:

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

      查看 Tomcat 目录中的 tcruntime-instance.bat(这就是最终创建 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 的更多信息,请参阅this SO question

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-08
        • 2012-06-09
        • 2016-04-27
        • 1970-01-01
        • 2012-07-21
        • 2016-04-22
        • 1970-01-01
        • 2017-02-23
        相关资源
        最近更新 更多