0

我在尝试加载库时遇到异常:UnsatisfiedLinkError。我已将库文件放在正确的路径中,并将路径添加到 PATH 环境变量。但似乎没有任何效果。直到我更改了 Tomcat 配置并将 -Djava.library.path=C:\Windows\System32 添加到 java 选项中。我的一位同事不必这样做,但它在她的系统上运行良好,我错过了什么?任何人都可以对此有所了解吗?

4

2 回答 2

0

在 JNI 中,Java 本地方法的名称和对应的 C 函数的名称不同。为了调用 C 函数,C 函数的名称必须包含前缀“Java_”、类名和方法名。简单的方法是使用程序“javah”来生成包含所有定义的头文件。

尝试以下 Windows 示例:(记住 Java 类名必须与相应的文件名相同)

步骤 1. 创建以下 Java 文件 (P.java):

class P
{
  static
  {
    // "P" is the name of DLL without ".dll"
    System.loadLibrary ("P");
  }

  public static native void f(int i);

  public static void main(String[] args)
  {
    f(1);
  }
}

步骤 2.javac P.java

步骤 3.javah P

然后,“javah”生成头文件“Ph”

步骤 4. 创建文件“P.def”,包括以下两行(此文件定义导出的符号,在本例中为 C 函数的名称):

EXPORTS
Java_P_f

第 5 步。创建您的 C 文件 (Pc):

#include "p.h"

JNIEXPORT void JNICALL Java_P_f(JNIEnv *env, jclass c, jint i)
{
  printf("%i\n",i);
}

步骤 6. 在 Visual Studio 命令提示符中,定义以下变量:

设置 JAVA_HOME= JDK的路径

设置包含=%include%;%JAVA_HOME%\include;%JAVA_HOME%\include\win32

步骤 7. 生成 DLL:

cl /LD Pc P.def

步骤 8. 运行 Java 程序:

爪哇

(注:P.dll 和 P.class 位于同一目录下)

于 2013-11-26T16:07:29.257 回答
0

一种选择可能是注册 dll

Regsvr32 “path to your dll.dll”.

这将安装/注册dll(我假设它是一个dll)

但我一般观察到,如果它是 COM dll,那么你必须注册它并将其放入 System32

于 2012-06-28T12:04:45.647 回答