我在运行时遇到以下错误,同时尝试运行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)为什么忽略我在Eclipse中的用户库描述中为tess4j.jar
设置的“本机目录路径”?我的DLL就在那里。如果它没有忽略路径,它会找到DLL。
4)为什么显然在win32-x86-64/
前面加上DLL名称?我无处可去。这是某些API的标准前缀吗?
5)什么是“资源路径”?如何设置?
答案 0 :(得分:5)
如错误所示,它正在win32-x86-64/libtesseract302.dll
中寻找java.class.path
。您的类路径的一部分显然包括myproject/target/classes
。
前缀表示要加载的共享库的平台和体系结构,它允许将不同目标的共享库包含在同一个归档中。如果JNA无法在系统加载路径中找到所请求的库名称,则它会尝试在您的资源路径中找到它(如果需要,将其解压缩)。因此,如果您将DLL放在jar文件中,则需要为其添加win32-x86-64
前缀才能加载它。
“资源路径”名义上是您的类路径;基本上可以通过ClassLoader.getResource()
到达的任何地方。
答案 1 :(得分:4)
该错误源于您尝试在64位JVM中加载32位DLL。可能的解决方案是切换到32位JVM;或者,使用64-bit Tesseract and Leptonica DLLs。
答案 2 :(得分:2)
为什么不使用JNA API http://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再试一次。希望它有所帮助:)
答案 3 :(得分:2)
有同样的问题,按以下几行排序
System.load(" /usr/local/lib/liblept.so.5")
的System.loadLibrary("超正方体&#34)
对于您的情况,它可能是不同的库,但最终几乎相同:只需手动加载您需要的库。
答案 4 :(得分:1)
我认为解决此错误的更简单方法是恢复到没有收到此错误的较早版本。右键单击项目文件夹并导航到本地历史记录以恢复到早期版本。我在 Mac OS Big sur 上安装的 android studio 上验证了此解决方法。
答案 5 :(得分:0)
我遇到了同样的问题,发现这个“资源路径”不是由“本地目录路径”设置的 但是,您可以使用“库”选项卡中的“添加外部类文件夹”向其中添加新文件夹,即使此文件夹不包含任何类文件,也包含本机库文件(如Windows上的DLL)
答案 6 :(得分:0)
几天前,我在尝试使用JNA加载C ++ DLL时遇到了同样的错误消息。原来,原因是我的DLL所依赖的DLL丢失了。
在我的情况下,它是MS Visual Studio 2012可再发行组件,然后我将其下载并安装在计算机上,问题就消失了。尝试使用 Dependency Walker 查找任何缺少的库并安装它们。
答案 7 :(得分:0)
我遇到了类似的问题,我尝试了上面所有的答案,但没有解决我的问题,最后我检查了获得dll的源,发现我没有安装Windows可再发行的2012,dll是使用它构建的,一旦我安装它,异常就消失了。
答案 8 :(得分:-1)
我遇到了同样的问题,无法从'libtesseract302'dll
加载库C:\Users\xxxxx\AppData\Local\Temp\tess4j\win32-x86-64.
经过一些分析,我发现了使用依赖行者的问题。问题是 system32 中缺少某些 windows.dll 。我安装了Microsoft Visual C ++ 2005,2017-2019以更新Windows中的dll文件。这解决了我的问题。