如何从.jar文件引用.dll

时间:2010-03-30 15:58:49

标签: java jar dll

我有一个应用程序,它使用调用.dll的.jar中的方法。这在我的机器上工作正常(当应用程序被解包或以.jar本身运行时)但是当application.jar在另一台机器上运行时,系统路径上有外部.dll,它无法运行dll文件

.dll必须位于特殊位置吗?我假设它在系统路径上就可以找到它。

提前致谢

Dougie

4 个答案:

答案 0 :(得分:4)

java.library.path解决方案并不总是很好:在许多情况下您无法更改JVM参数。更好的解决方案:

1)已经提到:将DLL放在与JAR相同的目录中,遗憾的是它使得这样的JAR使用更加困难 - 现在JAR不仅仅是一个JAR,而且还有一个附带的DLL

2)将DLL作为普通资源放入JAR中,在JAR启动期间将此DLL提取到某处,例如$ TMP,然后使用System.load(new File(...)),如上所示。那么这个JAR只是一个JAR,这个JAR的用户甚至可能不知道它使用任何DLL

你也可以使用Maven NAR插件,如果你使用Maven进行构建,这个插件非常强大。见http://duns.github.com/maven-nar-plugin/

答案 1 :(得分:1)

尝试使用:

File dll = new File([...]);

System.load(dll.getAbsolutPath());

我会将dll打包在与jar-archive相同的目录中。

答案 2 :(得分:0)

我建议将它放在与您的应用程序相同的文件夹中。话虽如此,“它无法运行dll文件”有点模糊......你确定它不是一个问题,其他DLL是一个不同的版本(因此没有正确加载,而不是在全部)?

此外,库搜索路径由java.library.path parameter定义。

答案 3 :(得分:0)

假设您正在使用Sun JVM,可以通过在命令行上设置java库路径在命令行上指定本机库的位置。

这可以通过选项“-Djava.library.path = dll directory”来完成

它可以取决于如何在java源代码中加载库。你有权访问吗?你可以发布代码吗?

如果java代码使用System.load(String),它将指向dll的完整路径。

如果它使用System.loadLibrary(String),它只需要库名,并将在java.library.path参数指定的位置进行搜索。