2013-01-13 33 views
2

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

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”,据称副本在所有我需要的文件。为什么这不起作用?

+0

你可以找到解决方案: [http://stackoverflow.com/questions/15559551/unsatisfiedlinkerror-with-sqlite4java-jar-on-mac-os-x-netbeans/22099958#22099958] [ 1] [1]:http://stackoverflow.com/questions/15559551/unsatisfiedlinkerror-with-sqlite4java-jar-on-mac-os-x-netbeans/22099958#22099958 –

+0

@ 7allouf,即解决方案建议将该库放在Java/Extensions中,这可能并不总是实用,例如,如果分发给客户端。对于使用IDE的开发人员来说这不是一个糟糕的解决方案,但它可能不适合分布式应用程序。 – Thunderforge

+0

你可以在这个其他堆栈溢出答案中看到这个问题,它还包括如何根据需要以编程方式设置'java.library.path':http://stackoverflow.com/a/35353377/3679676 –

回答

0

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

您可能认为解决方案是将可运行JAR文件导出为“将所需库复制到生成的JAR旁边的子文件夹中”并手动添加缺少的文件,但是,似乎也有效。

我发现的最佳解决方案实际上是Mac最友好的解决方案。作为一个可运行的JAR文件导出,而不是导出为Mac OS X应用程序包!要做到这一点在Eclipse:

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

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

+0

在什么Eclipse版本下这项工作?我的申请不完整。 – NoBugs

+0

我在写这篇文章时使用了Eclipse 4.2(Juno)。我不确定你的意思是“申请不完整”。 – Thunderforge

+0

输出文件类似于8个字节。 – NoBugs