C jni中dll加载异常

C jni中dll加载异常,c,dll,java-native-interface,unsatisfiedlinkerror,javah,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文

我试图用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
线程“main”java.lang.UnsatisfiedLinkError:C:\jni\U training\Hello World.dll中出现异常:找不到依赖库 位于java.lang.ClassLoader$NativeLibrary.load(本机方法) 位于java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1928) 位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825) 位于java.lang.Runtime.load0(Runtime.java:792) 位于java.lang.System.load(System.java:1059) 在HelloWorld。(HelloWorld.java:10)
问题出在哪里?

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

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

  • <如果你的DLL不在C++中,那么你就必须通过CLI类的形式主义来进行接口。< /P>你可以粘贴错误信息作为文本,因为我不能读取线程“Mault:java. Lang.unCurdidEdkLeCurr:C:\JNIOLLealth\\Hello Word…DLL:不能在java .Lang.CultLooper-NATIVELIRBARI.加载(本地方法)中找到相关的库。在java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1928)在java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825)在java.lang.Runtime.load0(Runtime.java:792)在java.lang.System.load(System.java:1059)在HelloWorld.(HelloWorld.java:10)您使用
    System.load
    而不是
    System.loadLibrary
    使用预定义的库搜索路径有什么具体原因吗?没有,没有任何原因。我没有任何具体的感觉。我用dependecy walker调查了我的dll,发现它需要MSVCR90.dll…问题就在这里。。怎么解决呢?