在尝试运行 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)它究竟试图找到什么以及在哪里?
为什么它显然是在搜索
myproject/target/classes/
目录?我没有设置它。为什么它忽略了我在 Eclipse 的用户库描述中为
tess4j.jar
设置的“本机目录路径”?我的 DLL 在那里。如果它不忽略路径,它会找到 DLL。为什么它显然在 DLL 名称前面加上
win32-x86-64/
?我没有设置这个。这是一些API的标准前缀吗?
5)什么是“资源路径”?如何设置?
原文由 Suzan Cioc 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如错误所说,它正在寻找
win32-x86-64/libtesseract302.dll
在java.class.path
中。您的类路径的一部分显然包括myproject/target/classes
。前缀表示要加载的共享库的平台和架构,它允许不同目标的共享库包含在同一个存档中。如果 JNA 在系统加载路径中找不到请求的库名称,那么它会尝试在您的资源路径中找到它(如有必要,将其解压缩)。因此,如果您将 DLL 放入 jar 文件中,则需要为其提供
win32-x86-64
前缀以便加载。“资源路径”名义上是您的类路径;基本上可以通过
ClassLoader.getResource()
到达的任何地方。