8

我在我的 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)
4

6 回答 6

10

'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 中运行。

于 2010-01-17T18:20:36.520 回答
5

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

我的猜测是您的 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 中的“阴暗”领域之一。该线程徘徊了很多,我建议您通读以查看一些问题和解决方案。我认为你可以通过一些尝试和错误来取得成功。

于 2010-01-17T18:12:24.993 回答
3

其他选项:

  • 将属性 java.library.path 设置为包含 dll 的目录。示例:java -Djava.library.path="path/to/directory/ contains/the/dll" -jar appli.jar
  • 在代码中,使用 System.load 显式加载 dll。
于 2010-01-17T19:43:12.287 回答
1

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

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

于 2012-11-01T16:11:59.537 回答
1

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

于 2010-01-17T18:23:01.537 回答
0

我有同样的问题。

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

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

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

干杯!

于 2011-08-23T13:09:36.487 回答