java无法在jre之外加载dll

时间:2014-10-21 14:05:38

标签: java windows dll jvm

为什么在Java中加载库(.dll)似乎不可能,如果它不在/ jre / bin文件夹中。这很疯狂,但我有2个dll:

  • aa.dll
  • bb.dll ,取决于 aa.dll

如果我在C:\ Tmp中复制这些dll,则以下代码无效..... 如果在C:\ Program Files \ Java \ jre1.8.0_25 \ bin中复制这些dll,则使用相同的代码。

代码非常简单:

public class Main {
    public static void main(String[] args) {
        System.load("C:\\Tmp\\ftd2xx.dll");
        System.out.println("ftd2xx.dll loaded");
        System.load("C:\\Tmp\\JD2XX.dll");
    }
}

错误(结果):

ftd2xx.dll loaded
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jd2xx in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at jd2xx.JD2XX.<clinit>(JD2XX.java:729)
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.load0(Unknown Source)
    at java.lang.System.load(Unknown Source)
    at Main_02.main(Main_02.java:7)

更令人困惑的是,我可以从c:\ Tmp( aa.dll )加载一个库,另一个我不能加载( bb.dll )。 最后一个需要驻留在C:\ Program Files \ Java \ jre1.8.0_25 \ bin。

如果有人有任何有用的想法,我将非常感激。

我认为JVM不想加载可能的危险或不受信任的本机代码?如果它位于jre文件夹中,它会认为代码是安全的吗?但这绝对是一种想法。

谢谢。

1 个答案:

答案 0 :(得分:-1)

我确认一样: Windows 7(64位); jre1.8.0_102(32位); DLL&#39; s(32位); 完全相同,但在我的情况下,一个DLL(aa.dll)依赖于另一个bb.dll(aa.dll-&gt; bb.dll) aa.dll可以从任何地方加载(ex项目的lib路径),但仅限于我将bb.dll复制到jre1.8.0_102 \ bin目录;没有机会加载否则。尝试了各种组合来设置-Djava.library.path = project_path \ lib,设置系统PATH = project_path \ lib,将两个dll复制到windows \ system32 - 什么都没有帮助,唯一的机会就是将它放在jre上bin path。

更新:

你已经回答了自己的问题。这是一个安全:

转到 - &gt; Java控制面板 - &gt;高级 - &gt;混合代码.. 设置&#34;禁用验证..&#34;

和aa.dll成功加载。两者都存储在project_path \ lib