0

经过一番研究,有人说我可以在我的项目Run Configuration中添加以下VM Argument。在运行时,JVM 将搜索这些目录以查找 DDL。

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

GunCalibration是我工作区中的 Java 项目文件夹。 DLLs文件夹包含我所有使用我的 JNI 规范定义的 DLL。

结果,我收到此错误:

线程“主”java.lang.UnsatisfiedLinkError 中的异常:D:\Software x64\eclipse3.7\Kai\workspace_RealW\GunCalibration\myLib\DLLs\sixense.dll:找不到依赖库

但是,如果我将一些特定的 dll 文件复制到JAVA_HOME\jre6\bin,我的代码可以正常工作。(我确实将此路径添加到我的系统环境 PATH 中。)

谁能解释为什么使用 java.library.path 的第一种方法不起作用?我怎么知道需要在JAVA_HOME\jre6\bin中放置哪个 ddl ?

非常感谢~

4

1 回答 1

1

JAVA_HOME\jre6\bin 实际上位于系统 PATH 中(因为它与正在运行的 java.exe 程序位于同一目录),这使得系统可以加载其中的任何 DLL。java.library.path 主要来自 PATH 的值,但它只影响 VM 查找本地库的位置,而不影响系统本身。

VM 可以根据 java.library.path 中的路径显式加载任何文件,但它不会影响系统查找任何依赖 DLL 的方式(除了告诉系统在其搜索中包含初始 DLL 的路径 - 请参阅MSDN for LoadLibrary[Ex] )

复制 DLL 的一种替代方法是将 DLL 的路径添加到 PATH 环境变量中。

于 2012-05-31T14:05:35.117 回答