UnsatisfiedLinkError - 无法加载库 - 在资源路径中找不到本机库

Suz*_*ioc 12 java eclipse dll java-native-interface jna

我在运行时遇到以下错误,同时尝试运行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...])
Run Code Online (Sandbox Code Playgroud)

我的问题是:

1)它到底想要找到什么以及在哪里?

2)为什么显然会搜索myproject/target/classes/目录?我无处可去.

3)为什么忽略我tess4j.jar在Eclipse中的用户库描述中设置的"本机目录路径" ?我的DLL就在那里.如果它没有忽略路径,它会找到DLL.

4)为什么它显然在前面加上DLL名称win32-x86-64/?我无处可去.这是某些API的标准前缀吗?

5)什么是"资源路径"?怎么设置呢?

tec*_*age 6

像错误说,它是寻找win32-x86-64/libtesseract302.dlljava.class.path.你的类路径的一部分显然包括myproject/target/classes.

前缀表示要加载的共享库的平台和体系结构,允许将不同目标的共享库包含在同一个归档中.如果JNA无法在系统加载路径中找到所请求的库名称,则它会尝试在您的资源路径中找到它(如果需要,将其解压缩).因此,如果您将DLL放在jar文件中,则需要为其添加win32-x86-64前缀以便加载它.

"资源路径"名义上是你的阶级路径; 基本上可到达的任何地方ClassLoader.getResource().


ngu*_*enq 5

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