2013-01-13 47 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