【问题标题】:leadtools.RasterException: Native Library Ltkrnx.dll already loaded in another classloaderLeadtools.RasterException:本机库 Ltkrnx.dll 已加载到另一个类加载器中
【发布时间】:2019-05-15 14:12:49
【问题描述】:

我遇到了这个问题:

本机库 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 已在另一个类加载器中加载

【问题讨论】:

    标签: java spring-boot ocr leadtools-sdk


    【解决方案1】:

    您是否在 2 个不同的 Web 应用程序中使用 LEADTOOLS?如果是,以下答案可能会帮助您解决问题: java.lang.UnsatisfiedLinkError: Native Library XXX.so already loaded in another classloader

    由于该问题是关于 OpenCV,而不是 LEADTOOLS,我将在此处引用相关部分(非常轻微的编辑):

    现在有一个本地库只能加载的限制 在一个类加载器中。 Web 应用程序使用自己的类加载器,所以如果 一个 Web 应用程序加载了一个本地库,另一个 Web 应用程序不能这样做。因此代码加载本机 库不能放在 webapp 目录中,但必须放在 容器(Tomcat)的共享目录。当你写了一堂课 使用上面的通常模式(静态初始化程序中的 loadLibrary using class) 将包含该类的 jar 放在 共享目录。使用 .. 在 Web 应用程序中调用 loadLibrary 但是,本机库仍然会以“错误”方式加载 类加载器,你会得到 UnsatisfiedLinkError。

    要让“正确”的类加载器加载本地库,您可以 创建一个只有一个静态方法的小类 加载库。把这个类放在一个额外的罐子里,把这个罐子放在 共享 Tomcat 目录。然后在 web 应用程序中替换调用 通过调用您的新静态方法到 System.loadLibrary。这边走 .. native 库的类加载器将匹配并且本地 方法可以被初始化。

    如果您的情况不同,或者那里的建议对您没有帮助,请将以下信息发送至 support@leadtools.com,我们的支持团队将与您一起找出问题:

    1. 此问题的详细信息(您遇到的异常,LEADTOOLS 版本 20,64 位,Tomcat 8)
    2. 您的 LEADTOOLS 产品序列号(请勿在此处发布!)。如果您仍在评估并且没有序列号,只需提及即可。
    3. 到目前为止,您为解决问题所做的尝试以及获得的结果(例如,上面提到的答案)。
    4. 有关您的操作系统、IDE 或一般编程环境的其他详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多