2010-12-13 96 views
6

我使用的第三方jar試圖使用System.loadLibrary加載本地庫。我認爲正在發生的事情是正在加載的庫中有一個依賴於另一個本地庫。在這種情況下,指向-Djava.library.path無法正常工作。來自應用程序站點的說明將dll放在jre/bin目錄中,但我認爲這是一個非常糟糕的主意(特別是在嘗試部署到客戶端網站時)。Java System.loadLibrary依賴關係

所以,這個問題真的是2部分。

  1. 如果一個本地lib嘗試加載另一個本地lib,即-Djava.library.path不起作用,是否有意義?

  2. 是否有解決此問題的好方案?我想我可以顯式調用System.loadLibrary所有的dll(我甚至不知道這是否可行),但我需要確保以正確的順序調用它們,否則我會遇到同樣的問題。

編輯:我覺得這是有道理的,它正在發生,到目前爲止,我讀過的最好的解決辦法是使用的Dependency Walker來弄明白,然後以相反的順序加載它們...但我「M開到更好的建議...

感謝, 傑夫

回答

4

是的,這是有道理的,本地庫不使用Java屬性-Djava.library.path鏈接到其他本地庫。

一些可能的方案:

  • 的第三方jar固定加載自己的依賴,依靠的java.library.path。
  • 您的代碼以反向地形類型加載第三方jar所需的DLL。但是,這會讓您的代碼指定第三方jar的依賴關係。這些依賴可能會改變。
  • 您使用特定於操作系統的DLL搜索路徑(例如,在Unix/Linux/Mac上使用LD_LIBRARY_PATH,或在Windows上使用PATH)。但是,這可能需要啓動腳本。
+1

我試着加載反向排序,它確實有效,所以也許我會使用這種方法,除非有一些我所缺少的魔法解決方案。 – 2010-12-13 18:59:36

+0

這可能是我會做的,除了可能會向第三方提交缺陷。如果您正在開發跨平臺軟件,那麼動態鏈接的庫可能會因平臺而異。祝你好運! – 2010-12-13 19:14:28