【发布时间】:2016-08-24 12:47:23
【问题描述】:
我已经部署了一个 Web 应用程序,其中包含以下代码。
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
现在,我部署了另一个具有相同代码的 Web 应用程序。当它尝试加载库时,它会抛出以下错误。
Exception in thread "Thread-143" java.lang.UnsatisfiedLinkError:
Native Library /usr/lib/jni/libopencv_java248.so already loaded in
another classloader
我想同时运行这两个应用程序。
到目前为止我已经尝试过:
- 在一个应用程序中加载库并在另一个应用程序中捕获上述异常
- 从两个应用程序中删除 jar 并将 opencv.jar 放入 Tomcat 的类路径(即在 /usr/share/tomcat7/lib 中)。
但以上都不起作用,有什么建议我可以做到这一点吗?
编辑:对于选项二,
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
这条线有效,但当我实际要使用该库时出现异常。那是我关注的时候
Mat mat = Highgui.imread("/tmp/abc.png");
我得到了这个异常
java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J
at org.opencv.highgui.Highgui.imread_1(Native Method)
at org.opencv.highgui.Highgui.imread(Highgui.java:362)
【问题讨论】:
-
2 号应该有效。你确定你在其他地方删除了它,并且 webapp 中没有其他 jar 试图加载 lib?
-
@user2543253 请检查我编辑的问题。
-
您能否检查
Highgui是否由与loadLibrary相同的类加载器加载?否则原生方法不会被初始化。 -
Hii @user2543253 ,为了简单起见,我删除了我的第二个应用程序。现在我只部署了一个应用程序,它不包含 opencv jar。我把它放在 /usr/share/tomcat7/lib/ 目录下。我仍然收到“java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_1(Ljava/lang/String;)J”异常。
-
如何检查“Highgui 是否由与 loadLibrary 相同的类加载器加载?” @user2543253
标签: java opencv tomcat java-native-interface