在Mac OS X上使用sqlite4java Jar时出现了UnsatisfiedLinkError错误

3

我在我的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中",这应该会复制我需要的所有文件,但仍然出现此问题。为什么没有起作用?

你可以在以下链接中找到解决方案:https://dev59.com/4G_Xa4cB1Zd3GeqP7Ppv#22099958 - A.KAMMOUN
@7allouf,那个解决方案建议将库放在Java/Extensions中,但这并不总是切实可行的,例如如果要分发给客户。对于使用IDE的开发人员来说,这不是一个坏的解决方案,但对于分布式应用程序来说可能不是正确的选择。 - Thunderforge
你可以在另一个 Stack Overflow 的答案中看到这个问题的解决方法,该答案还介绍了如何在需要时编程设置 java.library.path:https://dev59.com/GVsX5IYBdhLWcg3wLc-J#35353377 - Jayson Minard
1个回答

0

与许多其他依赖项不同,sqlite4java使用基于主机平台的其他文件来与SQLite数据库进行接口交互。当Eclipse打包所需的库时,它只复制sqlite4java.jar文件,而不是其他必需的文件。

你可能会认为解决方案是将可运行的JAR文件导出并选择“将所需的库复制到生成的JAR旁边的子文件夹中”,然后手动添加缺少的文件,但遗憾的是,这似乎也不起作用。

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

  1. 转到“文件”->“导出…”
  2. 在“其他”文件夹下,选择“Mac OS X应用程序包”
  3. 填写第一个屏幕并单击“下一步”
  4. 在“添加到Bundle”部分中,在“Add to Classpath”部分中添加来自SQLite下载的“libsqlite4java-osx.jnilib”文件(如果您支持旧硬件,还可以添加libsqlite4java-osx-10.4.jnilib和libsqlite4java-osx-ppc.jnilib)
  5. 单击“完成”
你现在将拥有一个能够正确加载sqlite4java的Mac OS X应用程序。

这是在哪个Eclipse版本下工作的?我得到了应用程序不完整的错误。 - NoBugs
我在编写这个程序时使用的是Eclipse 4.2(Juno)。我不确定你所说的“应用程序不完整”是什么意思。 - Thunderforge
输出文件只有8个字节。 - NoBugs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接