【问题标题】:java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.pathjava.lang.UnsatisfiedLinkError:java.library.path 中没有 db_java-4.2
【发布时间】:2012-08-14 21:21:56
【问题描述】:

我正在尝试从 java 代码访问 Berkeley DB 数据库文件(比如 Test.db),然后想从中读取所有对。我正在使用 com.sleepycat.db.*com.sleepycat.bdb.* 包(注意:不是 Oracle Berkeley DB JE)来完成这项任务。对于实现,我完全按照BerkeleyDB Java API Tutorial 中的描述进行了

所以,当我从 eclipse 运行这个项目时,我得到了这个错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.path

从堆栈跟踪中,此异常的来源发生在这一行

env = new DbEnv(0);

我尝试通过java命令设置它

$java -D<name>=<value>

但它仍然没有工作。

我的目标是将此项目导出为 jar 文件并使用它来读取任何地方的 BDB。任何知道如何摆脱这种情况的人,我感谢您的帮助。如果我也可以重定向到任何工作教程以从 Java 代码访问 Berkeley DB,那就太好了。谢谢!!

【问题讨论】:

    标签: berkeley-db loadlibrary unsatisfiedlinkerror


    【解决方案1】:

    解决方案:经过大量工作,我发现我正在开发的 Sleepycat API 使用的是通过 JNI 用 C/C++ 编写的本机库。安装在我的 PC 上的 Berkeley DB 没有共享对象文件 db_java-4.2(准确地说,文件名为 libdb_java-4.2),这意味着此 BDB 未针对 java API 进行配置。

    因此,解决方案是通过启用 java 配置重新从头开始安装 BDB。

    【讨论】:

    • 请解释一下如何解决这个问题
    • 使用 --enable-java 标志来构建 Java 支持。这为 Berkeley DB 和 Berkeley DB XML 构建了 Java 支持
    【解决方案2】:

    我遇到了同样的问题。

    就像 kk_Pulla 提到的,sleepycat API 使用通过 Java Native Interface 用 C/C++ 编写的本地库。所以调用 Sleepycat API 意味着 java 代码最终会调用编译后的 C/C++ 代码。

    如果您收到“java.lang.UnsatisfiedLinkError: no db_java-4.2 in java.library.path”错误,那么至少在我的情况下,您可能没有在其中包含相关的本机库你的项目。

    我会描述我为解决这个问题所做的工作。首先让我描述一下我的环境。

    1. Linux 机器上的 IntelliJ maven Java 项目。
    2. 构建 Berkeley DB 版本 18.1.40。
    3. Berkeley 版本在配置阶段包含了 --enable-java 开关。
    4. 我通过 Intellij 菜单文件 > 项目结构将 db.jar(在 build_unix 目录中找到)作为模块依赖项包含在内。我在左侧窗格的项目设置下选择了模块,然后在依赖项选项卡下我将 db.jar 文件添加为依赖项。

    这是我遇到 UnsatisfiedLinkError 之前项目的状态。为了解决这个问题,我将本机库(位于 unix_build/.libs 目录中)添加到项目中。你可以通过选择文件菜单>然后项目结构来做到这一点。在项目设置下的左侧窗格中选择库,然后单击右侧窗格上的 + 号以添加本机库的目录。

    这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 2020-06-29
      • 2017-06-27
      • 2016-08-29
      • 2012-07-16
      • 2016-11-10
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多