我正在尝试将JNI
与C++
一起使用,但它不正确我已经证明了从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)
我应该怎样做才能解决这个问题
答案 0 :(得分:0)
您需要将C ++方法声明为extern "C"
,以确保其符号名称不受损坏且可由动态链接器找到:
extern "C"
{
...
JNIEXPORT void JNICALL Java_KeyLogger_capture(JNIEnv *env, jobject obj) {
...
}
...
} // end extern "C"
或者,您可以使用RegisterNatives()
函数在JNI_OnLoad()
例程中注册本机方法,而不是使用难以完全正确生成的函数名称。