java - Leadtools.RasterException:本机库 Ltkrnx.dll 已加载到另一个类加载器中
问题描述
我遇到了这个问题:
本机库 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 的调用。这样,.. native 库的类加载器将匹配,并且可以初始化本地方法。
如果您的情况不同,或者那里的建议对您没有帮助,请将以下信息发送至 support@leadtools.com,我们的支持团队将与您一起找出问题:
- 这个问题的细节(你得到的例外,LEADTOOLS 20 版,64 位,Tomcat 8)
- 您的 LEADTOOLS 产品序列号(请勿在此处发布!)。如果您仍在评估并且没有序列号,请提及。
- 到目前为止,您为解决问题所做的尝试以及给您带来的结果(例如,上面提到的答案)。
- 有关您的操作系统、IDE 或一般编程环境的其他详细信息。
推荐阅读
- c# - .NET Web API 项目错误 CS1703:已导入具有等效标识的多个程序集:System.Runtime.Serialization.Primitives.dll
- deep-learning - 当我使用 WGAN 时,为什么我的损失是负数?
- python - “if -if -else”和“if-elif-else”有什么区别
- javascript - 使用 javascript join 和 json.parse 扁平化数组
- tomcat - Intellij IDEA - 在 tomcat 中为多个模块定义单独的上下文根
- php - 将 MySQL 数据转换为 JSON 并包含 MySQL 计数
- apache - 301 重定向,在 url 中使用 %0A
- r - r - 来自 crosswalkr 的 renamefrom 函数返回 0 列
- javascript - Bootstrap 4 通过 JavaScript 切换按钮上的图标
- python-3.x - 无法使用 Selenium 和 Python3 在表单中找到元素