JNI(Java和C ++)出错

时间:2013-12-24 04:00:25

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

我正在尝试将JNIC++一起使用,但它不正确我已经证明了从c++调用java方法的所有步骤。但是我收到了以下错误(下面给出了Java代码和C ++代码)

Java代码在这里

public class KeyLogger {
    public native void capture();
    static{
        System.loadLibrary("KeyLogger");
    }
    public static void main(String[]args){

        KeyLogger obj = new KeyLogger();
        obj.capture();
    }
}

此处的C ++代码

**// All libraries included Fucntion goes here.** 

JNIEXPORT void JNICALL Java_KeyLogger_capture
(JNIEnv *env, jobject obj){

    cout<<"Working Fine"<<endl;
}
void main(){}

错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: KeyLogger.capture()V
    at KeyLogger.capture(Native Method)
    at KeyLogger.main(KeyLogger.java:10)

我应该怎样做才能解决这个问题

1 个答案:

答案 0 :(得分:0)

您需要将C ++方法声明为extern "C",以确保其符号名称不受损坏且可由动态链接器找到:

extern "C"
{
...
JNIEXPORT void JNICALL Java_KeyLogger_capture(JNIEnv *env, jobject obj) {
    ...
}
...
}  // end extern "C"

或者,您可以使用RegisterNatives()函数在JNI_OnLoad()例程中注册本机方法,而不是使用难以完全正确生成的函数名称。