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

新手上路,请多包涵

在尝试运行 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)它究竟试图找到什么以及在哪里?

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

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

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

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

原文由 Suzan Cioc 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 818
1 个回答

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

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

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

原文由 technomage 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题