DJava.library.path不';不起作用,但将目录添加到路径起作用
我有一个JAR文件,需要一些外部DLL才能工作。我用DJava.library.path不';不起作用,但将目录添加到路径起作用,java,path,Java,Path,我有一个JAR文件,需要一些外部DLL才能工作。我用 System.loadLibrary("openalprjni"); 如果我尝试在没有任何参数的情况下执行JAR,则无法找到DLL(显然): 如果我尝试使用Djava.library.path将路径添加到DLL,它也不起作用(请注意,我将新路径附加到现有路径,而不是覆盖它) 请注意,现在的错误是找不到依赖库,而不是java.library.path中的普通no xxx。然而,我不知道这意味着什么 程序运行的唯一方法是在Windows控制面板
System.loadLibrary("openalprjni");
如果我尝试在没有任何参数的情况下执行JAR,则无法找到DLL(显然):
如果我尝试使用Djava.library.path将路径添加到DLL,它也不起作用(请注意,我将新路径附加到现有路径,而不是覆盖它)
请注意,现在的错误是找不到依赖库
,而不是java.library.path中的普通no xxx。然而,我不知道这意味着什么
程序运行的唯一方法是在Windows控制面板中手动将D:\ALPRTest\path添加到dll
的路径变量中
如果我使用-XshowSettings:properties
,我可以确认两个java.library.path
是完全相同的,但是除非我手动将此路径添加到路径中,否则JAR不会运行
为什么-Djava.library.path
不起作用,而是添加到path工作?您没有附加到现有库路径,而是附加到path
环境变量的内容。你能公布你正在使用的实际路径吗?您是使用包含DLL名称的完整路径,还是仅使用其目录?你能从程序内部打印java.library.path
的值吗?用java加载库时,我只使用它的名称,没有路径(如我在第一块中所示)。如果我在main方法中打印java.library.path
的内容,我可以看到我的DLL的绝对路径在那里,但是我仍然有一个不满意的链接错误,即使DLL在正确的路径中。即使我删除DJava.library.path
选项,它仍然有效,当DLL的绝对路径在path变量中时,问题可能是即使正确设置了java.library.path,Windows也不会在其路径以外的任何位置查找依赖库。参考和
> java -jar dist\ALPRTest.jar "param1" "param2"
> Exception in thread "main" java.lang.UnsatisfiedLinkError: no openalprjni in java.library.path
> java -Djava.library.path="%PATH%;D:\ALPRTest\path-to-dll" -jar dist\ALPRTest.jar "param1" "param2"
> Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\ALPRTest\dist\openalprjni.dll: Can't find dependent libraries