我部署了一个网络应用程序,其中包含以下代码。
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)
Highgui
是否被同一个类加载器加载了,它是否做了loadLibrary
的操作?否则本地方法将无法初始化。 - user2543253