在jni中加载dll的异常

时间:2012-07-06 11:28:56

标签: c dll java-native-interface unsatisfiedlinkerror javah

我试图用JNI实现一个简单的HelloWorld应用程序。从Java调用c函数。我创建了一个java类:

class HelloWorld{
private native void print();
public static void main(String[] args){
    new HelloWorld().print();


}

static{
    System.load("c://jni_training//HelloWorld.dll");
}

}

然后生成一个.h文件,创建了c实现并成功生成了.dll。但我无法执行java HelloWorld ...我看到异常

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\jni_training\Hello World.dll: Can't find dependent libraries 
   at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
   at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1928) 
   at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825) 
   at java.lang.Runtime.load0(Runtime.java:792) 
   at java.lang.System.load(System.java:1059) 
   at HelloWorld.<clinit>(HelloWorld.java:10

问题是什么?

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,如果您确定msvcr90.dll是依赖项,那么您可以有多个选项。

  1. 将dll放在java库路径中,只需执行System.out.println(System.getProperty(“java.library.path”));您知道库路径是什么,并将您的dll文件复制到其中一个目录。
  2. 加载dll的方式与加载HelloWorld.dll的方式相同, 请参阅:Nice explanation

答案 1 :(得分:0)

如果该DLL不在C ++中,那么你必须通过CLI类的态度进行接口。