2012-05-31 25 views
0

經過一番研究,有人說我可以在我的項目運行配置添加以下VM參數。在運行時,JVM將搜索這些目錄以查找DDL。爲什麼我的Java項目可以在Eclipse中成功調用我的DLL,當我把它們放在JAVA_HOME jre6 bin但是在使用java.library.path時失敗了?

-Djava.library.path="${workspace_loc}/GunCalibration/myLib/DLLs;${env_var:PATH}" 

GunCalibration是我的工作空間我的Java項目文件夾。 DLLs文件夾包含我的JNI規範定義的所有我的DLL。

其結果是,我得到這個錯誤:

Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Software x64\eclipse3.7\Kai\workspace_RealW\GunCalibration\myLib\DLLs\sixense.dll: Can't find dependent libraries

但是,如果我一些具體的dll文件複製到JAVA_HOME \ JRE6 \ BIN,我的代碼工作正常。 (我將這個路徑添加到我的系統環境路徑中。)

任何人都可以解釋爲什麼使用java.library.path的第一種方法不起作用嗎?我怎麼知道哪個ddl需要放在JAVA_HOME \ jre6 \ bin

謝謝了很多〜

+0

任何機會都有一些32/64位問題? – nitind

+0

@technomage我嘗試添加我的路徑** D:\ Software x64 \ eclipse3.7 \ Kai \ workspace_RealW \ GunCalibration \ myLib \ DLLs **其中我的DLL存儲到PATH環境變量,但它仍然顯示相同的錯誤。所以這些DLL只能在JAVA_HOME \ jre6 \ bin中找到?再次感謝。 – enix0907

+0

使用依賴關係walker(http://dependencywalker.com)來確定您需要的DLL的完整列表,然後確保PATH中包含* all *的路徑。 – technomage

回答

1

JAVA_HOME \ JRE6 \ BIN實際上是在系統PATH(因爲它是在同一目錄作爲正在運行的程序的java.exe),這使得任何DLL有由可裝載系統。 java.library.path大多是從PATH的值派生而來,但它隻影響虛擬機查找本地庫的位置,而不是系統本身。

虛擬機可以基於java.library.path中的路徑顯式加載任何文件,但它不會影響系統查找任何相關DLL的方式(除了告訴系統在其中包含初始DLL的路徑搜索 - 請參見MSDN for LoadLibrary[Ex]

複製DLL的一種替代方法是將路徑添加到PATH環境變量的DLL中。

相關問題