以下是这种情况。我试图在Java中加载JRI for R集成。
这就是我所知道的让它发挥作用:
- 确保JRI DLL的路径在java.library.path中(因此java可以加载本机库)。
- 确保R DLL的路径在系统路径中(因此系统可以解析DLL依赖性)。
如果在我的应用程序加载之前这两个都是真的,那么库将加载没有问题 但是,如果我尝试自动执行此操作而无需使用参与,则遇到加载问题。
以下是我试图让它发挥作用的方式:
- 如果JRI DLL不在java.library.path中,请在运行时使用反射添加它,并尝试立即再次加载库 - 这很有效。
- 如果R DLL不在系统' Path'使用' setx命令添加它。
第二步是我遇到了大问题 - 我仍然发现找到R DLL(这是JRI DLL的依赖项)时出错。
我的代码设置了系统'路径'因为它应该立即,因为我在控制面板中检查这一点,但加载JRI库失败了依赖
我知道如果我在运行我的应用程序之前设置路径正确地设置路径,那么为什么它在这种情况下不起作用我不明白。
如果我杀了我的应用程序并从头开始,它的工作原理很好的路径'是从上次运行时设定的。
当加载DLL时发生依赖性故障时,实际发生的错误在哪里?
Java是否在寻找JRI DLL的依赖关系?我假设Java没有参与解决DLL的依赖关系,我错了吗?
如果操作系统负责解决DLL的依赖关系,那么为什么我的路径'更改无法识别?
当Java尝试加载时,环境变量是否会传递给DLL?
我应该补充一点,我在Netbeans中开发这个,但是如果我构建一个JAR并直接在终端中运行它,我会看到相同的行为。我经常看到一条路径'在重新启动Netbeans之前不会看到更新,但是我认为解析其依赖关系的DLL会使用' Path'直接
这非常令人沮丧,所以听到你对此的看法真的很棒。