【问题标题】:How to configure .dll file in Java?如何在 Java 中配置 .dll 文件?
【发布时间】:2010-01-17 18:08:50
【问题描述】:

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

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

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

如何加载这个 .dll 文件?

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

我已将“路径”环境变量设置为包含我的 .dll 文件的目录并按如下方式加载该 .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.<clinit>(TemplateClass.java:14)

【问题讨论】:

  • 将dll放在windows的system32文件夹中解决了我的问题

标签: java dll classpath jacob


【解决方案1】:

“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 文件放在您启动应用程序的目录中} 您的意思是主类所在的目录吗?如果是,那么如果我使用批处理脚本,为什么文件应该位于我的批处理脚本所在的目录中?您能否解释一下您的第一点,更多地关注我想在应用程序服务器中启动的时间点?
  • 它应该在您启动 Java 进程的目录中,而不是您的主类目录中。
【解决方案2】:

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

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

更新

谢天谢地,您发布的错误消息指出了确切的问题。您可以通过将包含您的 DLL 的目录放入 java.library.path 来解决它这个 Sun 论坛帖子显示了一个很好的示例:http://forums.sun.com/thread.jspa?threadID=627890

实际上,这远没有应有的干净;这似乎是 Java 中的“阴暗”领域之一。该线程徘徊了很多,我建议您通读以查看一些问题和解决方案。我认为你可以通过一些尝试和错误来获得成功。

【讨论】:

    【解决方案3】:

    其他选项:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 如果他在 Linux 上运行,JACOB 不会很有用!
      • 我假设 Linux 有一个 .so。相同的 cmets 适用。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题。

        我看到这个问题没有“回答”,所以上面的选项可能都不起作用。

        我的最后一个假设是 Jacob.dll 缺少它的依赖项。

        我所做的是获取 depend 并检查 Jacob 使用的所有依赖项是否已加载。 当然,这适用于 Windows。

        干杯!

        【讨论】:

          猜你喜欢
          • 2023-03-25
          • 2010-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-26
          • 1970-01-01
          • 2012-04-23
          • 1970-01-01
          相关资源
          最近更新 更多