【问题标题】:UnsatisfiedLinkError with sqlite4java Jar on Mac OS X在 Mac OS X 上使用 sqlite4java Jar 的 UnsatisfiedLinkError
【发布时间】:2025-12-06 23:45:01
【问题描述】:

我在我的 Java 应用程序中使用 sqlite4java 库,当我在 Eclipse 中运行它时它工作得很好。但是当我构建可运行的 JAR 并尝试在 Mac OS X 上运行它时,我收到以下错误:

Error: Could not load database file. 
Error: com.almworks.sqlite4java.SQLiteException: [-91] cannot load library:
java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64 in java.library.path

即使我选择“将所需的库打包到生成的 JAR”中也会发生这种情况,这应该会复制我需要的所有文件。为什么这不起作用?

【问题讨论】:

  • 您可以在以下位置找到解决方案:[*.com/questions/15559551/… [1]:*.com/questions/15559551/…
  • @7allouf,该解决方案建议将库放在 Java/Extensions 中,这可能并不总是实用的,例如,如果分发给客户端。对于使用 IDE 的开发人员来说,这不是一个糟糕的解决方案,但对于分布式应用程序来说,它可能不是正确的解决方案。
  • 您可以在另一个 Stack Overflow 答案中看到这一点,其中还介绍了如何在需要时以编程方式设置 java.library.path*.com/a/35353377/3679676

标签: java macos unsatisfiedlinkerror


【解决方案1】:

与许多其他依赖项不同,sqlite4java 使用基于主机平台的附加文件来与 SQLite 数据库交互。 Eclipse打包所需库时,只复制sqlite4java.jar文件,不复制其他所需文件。

您可能认为解决方案是使用“将所需库复制到生成的 JAR 旁边的子文件夹”选项导出可运行的 JAR 文件,然后手动添加丢失的文件,但唉,这似乎不是也可以工作。

我发现的最佳解决方案实际上是最适合 Mac 的解决方案。您无需导出为可运行的 JAR 文件,而是导出为 Mac OS X 应用程序包!在 Eclipse 中执行此操作:

  1. 转到“文件”->“导出...”
  2. 在“其他”文件夹下,选择“Mac OS X 应用程序包”
  3. 填写第一个屏幕并点击“下一步”
  4. 在“添加到捆绑包”部分下,从 SQLite 下载的“添加到类路径”部分添加“libsqlite4java-osx.jnilib”文件(您也可以添加 libsqlite4java-osx-10.4.jnilib 和 libsqlite4java-osx -ppc.jnilib 如果您支持旧硬件)
  5. 点击“完成”

您现在将拥有一个可以正确加载 sqlite4java 的 Mac OS X 应用程序。

【讨论】:

  • 这是在什么 Eclipse 版本下工作的?我的申请不完整。
  • 我在写这篇文章时使用的是 Eclipse 4.2 (Juno)。我不确定您所说的“申请不完整”是什么意思。
  • 输出文件大概有 8 个字节。