12

在尝试运行 Tess4J 时,我在运行时遇到以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'libtesseract302': Native library (win32-x86-64/libtesseract302.dll) not found in resource path ([myproject/target/classes/, ...some jars...])

我的问题是:

1)它究竟试图找到什么以及在哪里?

2)为什么它显然是搜索myproject/target/classes/目录?我没有设置它。

3) 为什么它忽略了我tess4j.jar在 Eclipse 的用户库描述中设置的“本机目录路径”?我的 DLL 在那里。如果它不忽略路径,它将找到 DLL。

4) 为什么它显然在 DLL 名称前面加上win32-x86-64/? 我没有设置这个。这是某些 API 的标准前缀吗?

5)什么是“资源路径”?如何设置?

4

7 回答 7

6

就像错误说的那样,它正在寻找win32-x86-64/libtesseract302.dllin java.class.path。您的类路径的一部分显然包括myproject/target/classes.

前缀表示要加载的共享库的平台和体系结构,它允许不同目标的共享库包含在同一个存档中。如果 JNA 在系统加载路径中找不到请求的库名称,则它会尝试在您的资源路径中找到它(如果需要,将其提取)。因此,如果将 DLL 放入 jar 文件中,则需要为其提供win32-x86-64前缀才能加载。

“资源路径”名义上是您的类路径;基本上可以到达的任何地方ClassLoader.getResource()

于 2013-11-05T03:24:17.140 回答
5

该错误源于您尝试在 64 位 JVM 中加载 32 位 DLL。可能的解决方案是切换到 32 位 JVM;或者,使用64 位 Tesseract 和 Leptonica DLL

于 2013-12-30T05:12:33.350 回答
4

有同样的问题,用以下几行排序

System.load("/usr/local/lib/liblept.so.5")
System.loadLibrary("tesseract")

对于您的情况,它可能是不同的库,但最终几乎相同:只需手动加载您需要的库。

于 2017-07-11T09:38:03.947 回答
3

为什么不使用 JNA APIhttp://www.java2s.com/Code/Jar/j/Downloadjna351jar.htm加载原生库?放入项目类路径后,添加此代码

NativeLibrary.addSearchPath("libtesseract302", "your native lib path");确保你有这个 libtesseract302.dll 文件,通常它位于windows32文件夹中。

例如,如果您的 libtesseract302.dll 文件在某个地方,c:/abcv/aaa/libtesseract302.dll那么您只需像这样设置路径NativeLibrary.addSearchPath("libtesseract302", "c:/abcv/aaa");

我不知道 Windows 路径是什么样的,c:/abcv/aaa或者c:\\abcv\\aaa\\

如果您想要更简单的方法,只需将所有必要的 dll 文件放入您的 windows32 文件夹,JVM 会处理它。

另一个问题可能是您没有正确安装应用程序或应用程序版本与您的 jar 版本不匹配。尝试安装最新的应用程序并下载最新的 jar 以重试。希望能帮助到你 :)

于 2014-05-30T03:00:27.300 回答
1

我遇到了同样的问题,发现这个“资源路径”不是由“本机目录路径”设置的。
但是,您可以使用“库”选项卡中的“添加外部类文件夹”向其添加新文件夹,即使此文件夹不包含任何类文件但本机库文件(如 Windows 上的 DLL)

于 2016-02-29T21:43:30.390 回答
1

几天前,我在尝试使用 JNA 加载 C++ DLL 时遇到了相同的错误消息。事实证明,原因是我的 DLL 依赖的缺少 DLL。

就我而言,它是 MS Visual Studio 2012 可再发行组件,然后我将其下载并安装在机器上,问题就消失了。尝试使用Dependency Walker查找任何丢失的库并安装它们。

于 2017-07-07T06:40:40.913 回答
1

我认为解决此错误的更简单方法是恢复到您没有收到此错误的早期版本。右键单击项目文件夹并导航到本地历史记录以恢复到早期版本。我在 Mac OS Big sur 上安装的 android studio 上验证了这个解决方法。

于 2021-02-03T12:42:04.580 回答