如何在Java中配置.dll文件?

我在我的java应用程序中使用Jacob jar文件。

这个Jacob jar文件附带一个.dll文件。 我已将Jacob jar文件添加到我的类路径中。 但是当我执行我的应用程序时,会发生运行时错误

"couldn't load jacob-1.15-M3-x86.dll file" 

我怎么能加载这个.dll文件?

编辑:================================================ =================================

我已将“路径”环境设置为包含我的.dll文件的dir并加载该.dll文件,如下所示

 static { System.loadLibrary("jacob-1.15-M3-x86.dll"); } 

但发生以下错误

  java.lang.UnsatisfiedLinkError: no jacob-1.15-M3-x86.dll in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1028) at TemplateClass.TemplateClass.(TemplateClass.java:14) 

‘jacob-1.15-M3-x86.dll’需要位于操作系统可以找到它的位置。 你有几个选择:

  • 您可以将.dll文件放在启动应用程序的目录中。 如果您有一个批处理脚本来启动您的应用程序,它将是该目录。 如果您从某种应用程序服务器开始,它通常是’bin’目录。

  • 您可以将.dll文件放在%PATH%环境变量中的某个位置。 我可能更容易更新您的PATH环境变量以包含包含.dll文件的目录。

  • 另一种方法是将.dll放入%SystemRoot%\ system32目录。 通常这是’C:\ Windows \ system32’。 除非它是MSCVRT运行时之类的共享库,否则通常不建议使用此选项。

您可能遇到的另一个可能的问题。 如果.dll编译为32位,则必须在32位Java运行时中运行。 同样,如果它是64位.dll,则需要在64位JRE中运行。

啊,这不是编译错误,而是运行时错误。

我的猜测是你的DLL需要在PATH 。 不是CLASSPATH ,而是PATH ,因为这是Windows查找DLL的地方。 尝试扩展PATH以包含DLL的位置,或者执行许多其他人的操作:将DLL转储到\Winnt\System\System32或者在您的盒子上调用系统目录。 换句话说,所有其他DLL都在哪里。

更新

谢天谢地,您发布的错误消息指出了确切的问题。 您可以通过将包含DLL的目录放入java.library.path来解决此问题。这个Sun论坛post显示了一个很好的示例: http : java.library.path

实际上,这比它应该的要干净得多; 这似乎是Java中“阴影”领域之一。 线程徘徊很多,我建议你一直阅读以查看一些问题和解决方案。 我想你可以通过一些试验和错误获得成功。

其他选择:

  • 将属性java.library.path设置为包含dll的目录。 示例:java -Djava.library.path =“path / to / directory / containing / the / dll”-jar appli.jar
  • 在代码中,使用System.load显式加载dll。

您需要设置LD_LIBRARY_PATH。 这将为您提供所有正确的步骤。

使用System.loadLibrary() 不要在末尾包含.dll

此外,如果您没有将java.library.path设置为指向包含DLL的文件夹,那么DLL应该位于您从中启动Java应用程序的目录中。

我有同样的问题。

我看到问题没有“回答”,所以上面的选项可能都没有。

我最后一个假设是Jacob.dll缺少其依赖性。

我做的是得到依赖并检查Jacob使用的所有依赖是否被加载。 当然这适用于Windows。

干杯!