【问题标题】:Exception with dll load in jnijni中的dll加载异常
【发布时间】:2012-07-06 11:28:56
【问题描述】:

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

什么问题?

【问题讨论】:

  • 您能否将错误消息粘贴为文本,因为我无法阅读图像
  • 线程“主”java.lang.UnsatisfiedLinkError 中的异常:C:\jni_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)
  • 您使用带有硬编码路径的System.load,而不是使用预定义库搜索路径的System.loadLibrary,是否有任何具体原因?
  • 不,没有理由。我没有任何具体的意义。我用dependecy walker调查了我的dll,发现它需要MSVCR90.dll....这是问题....如何解决?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      相关资源
      最近更新 更多