[英]Error with JNI (Java and C++)
我正在尝试将JNI
与C++
一起使用,但是这样做不正确,我已经说明了从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.