【发布时间】: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