gpt4 book ai didi

java - 为什么我的 Java 项目将 DLL 放在 JAVA_HOME\jre6\bin 中时可以在 Eclipse 中成功调用它们,但使用 java.library.path 却失败?

转载 作者:行者123 更新时间:2023-12-01 15:21:39 50 4
gpt4 key购买 nike

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

-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,我的代码可以正常工作。 (我确实将此路径添加到我的系统环境 PATH 中。)

有人可以解释为什么使用 java.library.path 的第一种方法不起作用吗?我如何知道需要将哪个 ddl 放入 JAVA_HOME\jre6\bin 中?

非常感谢~

最佳答案

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

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

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

关于java - 为什么我的 Java 项目将 DLL 放在 JAVA_HOME\jre6\bin 中时可以在 Eclipse 中成功调用它们,但使用 java.library.path 却失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827045/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com