Как исправить EXCEPTION_ACCESS_VIOLATION при загрузке файла dll c ++? - PullRequest
2 голосов
/ 09 мая 2019

Проблема

Я пишу простую программу 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.

1 Ответ

2 голосов
/ 09 мая 2019

Окончательное решение

7 и через полчаса мне наконец-то удалось найти решение.Я последовал совету Ван Денча по созданию моего dll-файла, используя компилятор minGW в Visual Studios вместо компилятора cygwin в Netbeans.

Вот ссылка на видео и документ что я нашел, как пройти, как это сделать.Обратите внимание, что видео на португальском языке.При этом документ, который следует, написан на английском языке, и в пошаговом руководстве показано пошаговое описание команд и конфигураций, которые вам необходимо выполнить.

Я хочу более подробно остановиться на моем решении, если другие найдут это полезным,Удачи!

...