C语言 jni 中 dll 加载的异常



我正在尝试用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_trainingHello 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

什么问题?

我有一个类似的问题,如果你确定msvcr90.dll是依赖关系,那么你可以有多个选择。

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

如果该DLL不在C++中,则必须通过CLI类形态进行接口。

最新更新