我面临的问题:
本机库 Ltkrnx.dll 已加载到另一个类加载器中
在重新部署应用程序(tomcat 8 服务器)期间。
我还添加了检查,但这对我没有帮助。
private void loadLibrary(LTLibrary library) {
if (!Platform.isLibraryLoaded(library)) {
Platform.loadLibrary(library);
}
}
引起:leadtools.RasterException: Native Library C:\LEADTOOLS 20\Bin\CDLL\x64\Ltkrnx.dll 已经在另一个类加载器中加载
您是否在 2 个不同的 Web 应用程序中使用 LEADTOOLS?如果是,以下答案可能会帮助您解决问题:java.lang.UnsatisfiedLinkError: Native Library XXX.so already loaded in another classloader
由于这个问题是关于 OpenCV,而不是 LEADTOOLS,我将在这里引用相关部分(非常轻微的编辑):
现在有一个限制,即只能在一个类加载器中加载本机库。Web 应用程序使用它们自己的类加载器,因此如果一个 Web 应用程序加载了本机库,另一个 Web 应用程序就不能这样做。因此加载本机库的代码不能放在 webapp 目录中,而必须放在容器(Tomcat)共享目录中。当您有一个用上面通常的模式编写的类(使用类的静态初始化程序中的 loadLibrary)时,将包含该类的 jar 放在共享目录中就足够了。但是,在 Web 应用程序代码中使用 .. loadLibrary 调用时,本机库仍将在“错误”的类加载器中加载,并且您将收到 UnsatisfiedLinkError。
为了使“正确”的类加载器加载本机库,您可以创建一个小类,其中包含一个只执行 loadLibrary 的静态方法。将这个类放在一个额外的jar 中,并将这个jar 放在共享的Tomcat 目录中。然后在 Web 应用程序中,使用对新静态方法的调用替换对 System.loadLibrary 的调用。这样,.. 本地库的类加载器将匹配,并且可以初始化本地方法。
如果您的情况不同,或者那里的建议对您没有帮助,请将以下信息发送至 [email protected],我们的支持团队将与您一起找出问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句