java代码:
public class TestDLL {
static{
System.loadLibrary( "goodluck ");
}
public native void hello();
public static void main(String[] args){
System.out.println(System.getProperty( "java.library.path "));
System.out.println( "start ");
new TestDLL().hello();
}
}
c头文件 javah生成
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h "
/* Header for class TestDLL */
#ifndef _Included_TestDLL
#define _Included_TestDLL
#ifdef __cplusplus
extern "C " {
#endif
/*
* Class: TestDLL
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_TestDLL_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
c源文件:
#include "goodluck.h "
#include "stdio.h "
JNIEXPORT void JNICALL Java_TestDLL_hello(JNIEnv * env, jclass jc){
printf( "hello\n ");
}
执行时,总是报Exception in thread "main " java.lang.UnsatisfiedLinkError: hello
当然dll文件 在当前目录 system32下都放过。
------解决方案--------------------
当使用 JNI 从 Java 程序访问本机代码时,您会遇到许多问题。您会遇到的三个最常见的错误是:
无法找到动态链接。它所产生的错误消息是:java.lang.UnsatisfiedLinkError。这通常指无法找到共享库,或者无法找到共享库内特定的本机方法。
无法找到共享库文件。当用 System.loadLibrary(String libname) 方法(参数是文件名)装入库文件时,请确保文件名拼写正确以及没有指定扩展名。还有,确保库文件的位置在类路径中,从而确保 JVM 可以访问该库文件。
无法找到具有指定说明的方法。确保您的 C/C++ 函数实现拥有与头文件中的函数说明相同的说明。
(摘自IBM中文网)
------解决方案--------------------
(new TestDLL()).hello();