我正在使用Tesseract开发基于Web的OCR系统。我的JDK是64位。但是当我运行我的项目时它会出现以下错误
java.lang.UnsatisfiedLinkError:找不到指定的模块。
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.Native.open(Native.java:1759)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
at com.sun.jna.Library$Handler.<init>(Library.java:147)
at com.sun.jna.Native.loadLibrary(Native.java:412)
at com.sun.jna.Native.loadLibrary(Native.java:391)
at net.sourceforge.tess4j.util.LoadLibs.getTessAPIInstance(Unknown Source)
at net.sourceforge.tess4j.TessAPI.<clinit>(Unknown Source)
at net.sourceforge.tess4j.Tesseract.init(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source)
at net.sourceforge.tess4j.ocr.TesseractOcr.performOcr(TesseractOcr.java:22).
但是当我在独立应用程序中使用Tesseract时,它会从图像中提取文本。我使用Tomcat作为服务器。并且tess4j-3.0.jar缺少liblept172.dll
我几乎完成了与此问题相关的所有教程。但不幸的是,没有为我工作。有人有想法吗?提前谢谢
答案 0 :(得分:0)
使用32位dll与64位java是不可能的。 您必须使用与本机dll的jvm相同的体系结构。
如果是这种情况,一个常见的jni问题是,如果你设置一个专用的&#34;本机库路径&#34;并且缺少像libc或vcrt这样的依赖dll。
同样常见的是,将lib放在未检查的路径中。如果您认为自己做得很好,我们在Windows上使用ProccessMonitor在init期间找到丢失的dll文件。您可以按照jvm查看的不同位置,包括文件名。
更新:根据文档tess4j在Windows上加载libtesseract304.dll
。
文档还声明,libs包含在jar中并在运行时提取。这可能需要作为命令行工具运行。它还使用jna https://jna.java.net/javadoc这是一个jni包装器来帮助加载DLL。它遵循jna.library.path。
我建议尝试一下ProcessMonitor。实时太短,无法尝试和错误调试DLL加载: - )
https://technet.microsoft.com/de-de/sysinternals/processmonitor.aspx