繁体   English   中英

JNI错误(Java和C ++)

[英]Error with JNI (Java and C++)

我正在尝试将JNIC++一起使用,但是这样做不正确,我已经说明了从java调用c++方法的所有步骤。 但我收到以下错误(下面给出了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)

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

您需要将您的C ++方法声明为extern "C"以确保其符号名不会被篡改,并且可以通过动态链接器找到:

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

另外,您可以使用RegisterNatives()函数从JNI_OnLoad()例程中注册本机方法,而不是使用很难完全正确地生成的函数名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM