【发布时间】:2009-08-31 17:42:23
【问题描述】:
这是我第一次尝试 JNI。我的最终目标是让当前在机器上运行的所有任务,但甚至需要让一个简单的示例运行。当我尝试执行我的主程序时,我不断收到此错误。我提供了我的简单 Java 主程序、生成的头文件和错误。
我不知道这个 DLL 可能依赖于什么。它最初引用了一个我跟踪并放入 system32 (msvcr90.dll) 的 DLL。
这是我用来编译 C 代码的命令,它生成了 DLL、OBJ、LIB、EXP 和清单文件。
cl -I"C:\Program Files\Java\jdk1.6.0\include" -I"C:\Program Files\Java\jdk1.6.0\include\win32" -MD -LD HelloWorld.c -FeHelloWorld. dll
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.load("C:\\temp\\HelloWorld.dll");
}
}
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
java.lang.UnsatisfiedLinkError: C:\temp\HelloWorld.dll: A dynamic link library (DLL) initialization routine failed
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at HelloWorld.<clinit>(HelloWorld.java:7)
Exception in thread "main"
【问题讨论】:
-
你好试试这里的步骤copypastejavacode.blogspot.com/2012/01/basic-java-jni.html它很详细,我希望你能休息一下。
-
什么'不满意的链接错误'?错误的文本在哪里?三种不同的解决方案至少有三种不同的可能性。
标签: java java-native-interface