0

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

什么问题?

4

2 回答 2

0

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

  1. 将 dll 放在 java 库路径中,只需执行 System.out.println(System.getProperty("java.library.path")); 并且您知道库路径是什么,并将您的 dll 文件复制到其中一个目录中。
  2. 以与加载 HelloWorld.dll 相同的方式加载 dll,请参阅:很好的解释
于 2013-06-26T14:54:58.300 回答
0

如果该 DLL 不在 C++ 中,那么您将不得不通过 CLI 类态射进行接口。

于 2017-08-21T09:55:02.593 回答