为什么在Java中加载库(.dll)似乎不可能,如果它不在/ jre / bin文件夹中。这很疯狂,但我有2个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文件夹中,它会认为代码是安全的吗?但这绝对是一种想法。
谢谢。
答案 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
中