Я пытаюсь использовать 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)
Что я должен сделать для этого, чтобы его решить
Вам нужно объявить свой C++ метод как extern "C"
чтобы гарантировать, что его имя символа не искажено и может быть найдено динамическим компоновщиком:
extern "C"
{
...
JNIEXPORT void JNICALL Java_KeyLogger_capture(JNIEnv *env, jobject obj) {
...
}
...
} // end extern "C"
В качестве альтернативы вместо использования сгенерированных имен функций, которые могут быть трудно получить точно, вы можете использовать функцию RegisterNatives()
для регистрации собственных методов из вашей JNI_OnLoad()
.
-Djava.library.path
?