JNI:获取java.lang.UnsatisfiedLinkError

时间:2014-09-02 07:44:26

标签: java c++ c eclipse java-native-interface

这已被问过几次并且有不同的接受答案。但他们都没有为我工作 我已经从我的项目中创建了一个jni dll,用于使用eclipse和jdk1.7.0_10(64位)的64x windows 7。但加载我的DLL后,我得到java.lang.UnsatisfiedLinkError 我开始基于这个guide创建一个helloworld项目。我会尽一切所说。但我已经收到了这个错误:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: test.HelloWorld.print()V
    at test.HelloWorld.print(Native Method)
    at test.HelloWorld.main(HelloWorld.java:24)

是的我已经包含了库路径是的我已经构建了x64的C项目是的我正在使用64位jvm。

代码:

package test;

public class HelloWorld {
    public native void print();  //native method
    static   //static initializer code
    {
        try{
            System.loadLibrary("CLibHelloWorld");

               }
               catch (UnsatisfiedLinkError e) {
                  System.err.println("Native code library failed to load.\n" + e);
                  System.exit(1);
                }

    } 

    public static void main(String[] args)
    {
        HelloWorld hw = new HelloWorld();
        hw.print();             //   ==>  i get error on this line
    }
}

/* 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

#include "HelloWorld.h"
#include "jni.h"
#include  "stdio.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
  printf("Hello world\n");
  return;
}

2 个答案:

答案 0 :(得分:2)

test.HelloWorld.print的C名称是

Java_test_HelloWorld_print

你错过了_test - 你是否在默认包中运行了javah?

答案 1 :(得分:0)

您错过了包名测试 你应该在c

中包含你的包名