Проблема
Я пишу простую программу Hello World с использованием собственного интерфейса Java (JNI).Когда я вызываю System.loadLibrary ("libsimple_JNI") для загрузки файла dll, содержащего функцию мира приветствия C ++, происходит EXCEPTION_ACCESS_VIOLATION (0xc0000005) (я компилирую в Netbeans с 64-битным cygwin).
Я пыталсястатическая загрузка библиотеки, а также загрузка ее внутри вспомогательной функции Java, которая вызывает функцию приветствия C ++.Я добавил путь к cygwin1.dll в системных переменных среды, что решило более ранние проблемы с Java, так как не удалось найти зависимости для моего файла DLL.
Вот точное сообщение об ошибке
Фатальная ошибка была обнаружена средой выполнения Java:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180128dd7, pid=19116, tid=0x0000000000003ea8
JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode windows-amd64 compressed oops)
Problematic frame:
C [cygwin1.dll+0xe8dd7]
Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
An error report file with more information is saved as:
C:\Users\Kogondo Admin\Desktop\JavaApplication7\hs_err_pid19116.log
Вот код Java
public static void main(String[] args) {
thingy my_thingy = new thingy();
my_thingy.hi();
}
public class thingy {
public thingy() {}
public void hi(){
System.loadLibrary("libsimple_JNI");
hello();
}
private native void hello();
}
Вот код C ++
void JNICALL Java_javaapplication7_thingy_hello (JNIEnv * env, jobject object){
printf("hi from C");
}
При правильной работе я ожидаю, что код выведет «привет из C» в окно вывода в Netbeans.