经过一些研究,有人说我可以在我的项目运行配置中添加以下虚拟机参数。在运行时,JVM 将搜索这些目录以查找 DDL。
-Djava.library.path="${workspace_loc}/GunCalibration/myLib/DLLs;${env_var:PATH}"
GunCalibration 是我工作区中的 Java 项目文件夹。DLLs 文件夹包含使用我的 JNI 规范定义的所有 DLL。
结果,我收到此错误:
线程"main"中的异常 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?
多谢~
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 环境变量。