UnsatisfiedLinkerror

时间:2012-06-28 10:05:35

标签: java

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

2 个答案:

答案 0 :(得分:0)

一个选项可能是注册dll

Regsvr32 “path to your dll.dll”.

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

但是我一般都注意到如果它是COM dll那么你必须注册它并把它放在System32中

答案 1 :(得分: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”生成头文件“P.h”

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

EXPORTS
Java_P_f

步骤5.创建C文件(P.c):

#include "p.h"

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

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

设置JAVA_HOME = JDK的路径

set include =%include%;%JAVA_HOME%\ include;%JAVA_HOME%\ include \ win32

步骤7.生成DLL:

cl / LD P.c P.def

步骤8.运行Java程序:

java P

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