java.lang.UnsatisfiedLinkError:本机库XXX.so已加载到另一个类加载器中

hu山

我已经部署了一个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

我想同时运行这两个应用程序。

直到现在我已经尝试了:

  1. 将库加载到一个应用程序中,并将上述异常捕获到另一个应用程序中
  2. 从两个应用程序中删除了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)
用户名

问题在于OpenCV如何处理本机库的初始化。

通常,使用本机库的类将具有加载该库的静态初始化程序。这样,类和本机库将始终在同一类加载器中加载。使用OpenCV,应用程序代码将加载本机库。

现在有一个限制,即只能在一个类加载器中加载本机库。Web应用程序使用它们自己的类加载器,因此,如果一个Web应用程序已加载了本机库,则另一个Web应用程序将无法执行相同的操作。因此,无法将加载代码的本机库放置在webapp目录中,而必须放置在容器的(Tomcat)共享目录中。当您使用上面的常用模式编写了一个类时(loadLibrary在使用类的静态初始化程序中),将包含该类的jar放在共享目录中就足够了。loadLibrary但是,使用OpenCV和Web应用程序代码中调用,本机库仍将被加载到“错误的”类加载器中,并且您将获得UnsatisfiedLinkError

要使“正确的”类加载器加载本机库,您可以使用仅执行的单个静态方法创建一个微型类loadLibrary将此类放在一个额外的jar中,然后将此jar放在共享的Tomcat目录中。然后,在Web应用程序中,将对的调用替换System.loadLibrary为对新的静态方法的调用。这样,OpenCV类的类加载器及其本机库将匹配,并且可以初始化本机方法。

编辑:根据评论者的要求的示例

代替

public class WebApplicationClass {
    static {
        System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
    }
}

使用

public class ToolClassInSeparateJarInSharedDirectory {
    public static void loadNativeLibrary() {
        System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
    }
}

public class WebApplicationClass {
    static {
        ToolClassInSeparateJarInSharedDirectory.loadNativeLibrary();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Studio:UnsatisfiedLinkError:findLibrary返回null-加载本机库

来自分类Dev

java.lang.UnsatisfiedLinkError:无法加载库

来自分类Dev

coco2d-x:java.lang.IllegalArgumentException:无法找到本机库

来自分类Dev

本机库加载时出现无法解释的UnsatisfiedLinkError

来自分类Dev

本机库加载时出现无法解释的UnsatisfiedLinkError

来自分类Dev

UnsatisfiedLinkError:本机库C:\ Domino \ nlsxbe.dll已加载到另一个类加载器中

来自分类Dev

java.lang.IllegalArgumentException:无法加载本机库

来自分类Dev

Opencv Android:java.lang.UnsatisfiedLinkError:dlopen失败:无法加载库“ libopencv_java.so”

来自分类Dev

JNI- java.lang.UnsatisfiedLinkError:找不到本机方法

来自分类Dev

运行android本机代码导致java.lang.UnsatisfiedLinkError

来自分类Dev

在Android 5.0中加载本机库时出现java.lang.UnsatisfiedLinkError

来自分类Dev

java.lang.UnsatisfiedLinkError:无法从加载器加载native_sample

来自分类Dev

JavaCPP,在JAR中归档本机库时出现UnsatisfiedLinkError

来自分类Dev

Android中的java.lang.UnsatisfiedLinkError错误

来自分类Dev

java.lang.UnsatisfiedLinkError:找不到要加载的DSO:libfbjni.so结果:0

来自分类Dev

UnsatisfiedLinkError:运行播放应用程序时如何加载opencv本机库?

来自分类Dev

java.lang.UnsatisfiedLinkError:无法加载库

来自分类Dev

C中的本机方法总和-java.lang.UnsatisfiedLinkError:找不到本机方法

来自分类Dev

Android Opencv:java.lang.UnsatisfiedLinkError:dlopen失败:无法加载库“ libopencv_java.so”

来自分类Dev

奇怪的java.lang.UnsatisfiedLinkError:找不到本机方法:

来自分类Dev

UnsatisfiedLinkError:本机库sunmscapi.dll已在另一个类加载器中加载

来自分类Dev

类加载器java.lang.NoClassDefFoundError?

来自分类Dev

如何在Java中修复java.lang.UnsatisfiedLinkError

来自分类Dev

Android中的java.lang.UnsatisfiedLinkError错误

来自分类Dev

Android java.lang.illegalargumentException无法找到本机库main

来自分类Dev

Android-java.lang.UnsatisfiedLinkError:未找到本机方法

来自分类Dev

java从另一个类加载器加载的类中访问资源文件

来自分类Dev

找到本机库时出现 Java UnsatisfiedLinkError

来自分类Dev

Leadtools.RasterException:本机库 Ltkrnx.dll 已在另一个类加载器中加载

Related 相关文章

  1. 1

    Android Studio:UnsatisfiedLinkError:findLibrary返回null-加载本机库

  2. 2

    java.lang.UnsatisfiedLinkError:无法加载库

  3. 3

    coco2d-x:java.lang.IllegalArgumentException:无法找到本机库

  4. 4

    本机库加载时出现无法解释的UnsatisfiedLinkError

  5. 5

    本机库加载时出现无法解释的UnsatisfiedLinkError

  6. 6

    UnsatisfiedLinkError:本机库C:\ Domino \ nlsxbe.dll已加载到另一个类加载器中

  7. 7

    java.lang.IllegalArgumentException:无法加载本机库

  8. 8

    Opencv Android:java.lang.UnsatisfiedLinkError:dlopen失败:无法加载库“ libopencv_java.so”

  9. 9

    JNI- java.lang.UnsatisfiedLinkError:找不到本机方法

  10. 10

    运行android本机代码导致java.lang.UnsatisfiedLinkError

  11. 11

    在Android 5.0中加载本机库时出现java.lang.UnsatisfiedLinkError

  12. 12

    java.lang.UnsatisfiedLinkError:无法从加载器加载native_sample

  13. 13

    JavaCPP,在JAR中归档本机库时出现UnsatisfiedLinkError

  14. 14

    Android中的java.lang.UnsatisfiedLinkError错误

  15. 15

    java.lang.UnsatisfiedLinkError:找不到要加载的DSO:libfbjni.so结果:0

  16. 16

    UnsatisfiedLinkError:运行播放应用程序时如何加载opencv本机库?

  17. 17

    java.lang.UnsatisfiedLinkError:无法加载库

  18. 18

    C中的本机方法总和-java.lang.UnsatisfiedLinkError:找不到本机方法

  19. 19

    Android Opencv:java.lang.UnsatisfiedLinkError:dlopen失败:无法加载库“ libopencv_java.so”

  20. 20

    奇怪的java.lang.UnsatisfiedLinkError:找不到本机方法:

  21. 21

    UnsatisfiedLinkError:本机库sunmscapi.dll已在另一个类加载器中加载

  22. 22

    类加载器java.lang.NoClassDefFoundError?

  23. 23

    如何在Java中修复java.lang.UnsatisfiedLinkError

  24. 24

    Android中的java.lang.UnsatisfiedLinkError错误

  25. 25

    Android java.lang.illegalargumentException无法找到本机库main

  26. 26

    Android-java.lang.UnsatisfiedLinkError:未找到本机方法

  27. 27

    java从另一个类加载器加载的类中访问资源文件

  28. 28

    找到本机库时出现 Java UnsatisfiedLinkError

  29. 29

    Leadtools.RasterException:本机库 Ltkrnx.dll 已在另一个类加载器中加载

热门标签

归档