2013-11-04 41 views
6

我已经在运行时出现以下错误,试图运行Tess4J:UnsatisfiedLinkError - 无法加载库 - 本地库中的资源路径没有找到

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)为什么它会忽略在Eclipse中用户库描述符中为tess4j.jar设置的“本机目录路径”?我的DLL在那里。如果它不忽略路径,它会找到DLL。

4)为什么它显然预先挂接了win32-x86-64/的DLL名称?我没有设置这个地方。这是一些API的标准前缀?

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

回答

5

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

前缀表示要加载的共享库的平台和体系结构,它允许将用于不同目标的共享库包含在同一个存档中。如果JNA在系统加载路径中找不到所需的库名称,则它会尝试在资源路径中找到它(如果需要,将其解压缩)。所以如果你把DLL放在一个jar文件中,你需要为它加上win32-x86-64前缀。

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

1

为什么不使用JNA API http://www.java2s.com/Code/Jar/j/Downloadjna351jar.htm加载本机库?一旦你把你的项目类路径,你添加此代码

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

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

我不知道怎么的Windows路径看起来要么c:/abcv/aaac:\\abcv\\aaa\\如果你想

更简单的方法,只需将所有必需的dll文件放入windows32文件夹中,JVM就会处理它。

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

0

我有同样的问题,并发现这个“资源路径”不是由“本地目录路径”设置。
但是,您可以通过在库选项卡使用“添加外部类文件夹”添加新文件夹到它,即使该文件夹不包含任何类的文件,但本地库文件(如DLL在Windows上)

0

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

在我的情况下,它是MS Visual Studio 2012 redistributable,然后我下载并安装在机器上,问题消失了。尝试使用Dependency Walker找到任何缺失的库并安装它们。

1

有同样的问题,通过下面的代码

System.load( “在/ usr/local/lib目录/ liblept.so.5”)

的System.loadLibrary( “正方体” 分类)

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

相关问题