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
#endifc源文件:
#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下都放过。

解决方案 »

  1.   

    当使用 JNI 从 Java 程序访问本机代码时,您会遇到许多问题。您会遇到的三个最常见的错误是:无法找到动态链接。它所产生的错误消息是:java.lang.UnsatisfiedLinkError。这通常指无法找到共享库,或者无法找到共享库内特定的本机方法。
    无法找到共享库文件。当用 System.loadLibrary(String libname) 方法(参数是文件名)装入库文件时,请确保文件名拼写正确以及没有指定扩展名。还有,确保库文件的位置在类路径中,从而确保 JVM 可以访问该库文件。
    无法找到具有指定说明的方法。确保您的 C/C++ 函数实现拥有与头文件中的函数说明相同的说明。
    (摘自IBM中文网)
      

  2.   

    问题:生成的动态链接库成功,但是却没有包含你要的函数。也就是说动态链接库不全。
    解决办法:在生成.h头文件前先把java程序编译一下(虽然eclipse是自动编译,手动再debug一下)然后再生成头文件->生成动态链接库->运行java程序
      

  3.   

    我的还是找不到指定本地方法,ubuntu下可以找到,但在debian下就找不到了?
    请高手指教、、、、、
      

  4.   

    是不前期配置哪里有问题呢,
    我也遇到这样的问题,
    不过我用DLLVIEW 看了,有指定的方法,
    有VC可以正常使用,
    为啥JAVA JNI 不成呢。
      

  5.   

    System.loadLibrary("hello");中“hello”要与生成的hello.dll同名,否则会出现那个错误