Программа Java JNI C отлично работает с Mingw32, а не с Cygwin64

Ниже приведенная Java-программа JNI отлично работает со средой (1). Но если я изменю среду на (2), это даст ошибку. Любая помощь оценена, чтобы решить эту ошибку.

Java-код:

package avajjni;
public class AvajJNI {
    static{
    //Environment (1)
    //System.load("D:\\cpro\\c_jni_library\\dist\\Debug\\MinGW_32-Windows\\libc_jni_library.dll");

    //Environment (2)
    System.load("D:/cpro/c_jni_library/dist/Debug/Cygwin_64-Windows/libc_jni_library.dll");
    }
    public native void fnDisplayData();
    public static void main(String[] args) {
        AvajJNI obj = new AvajJNI();
        obj.fnDisplayData();
    }
}

Код C (.c)

#include <stdio.h>
#include "avajjni_AvajJNI.h"

JNIEXPORT void JNICALL Java_avajjni_AvajJNI_fnDisplayData
  (JNIEnv *env, jobject obj){
    printf("JNI Method Called\n");
}

Окружающая среда (1), где работает нормально:
ОС: Windows 8.1 64 бит
Java jdk1.8.0_51 (32 бит)
Mingw 32 бит
Опция компилятора C: -shared -m32 -Wl,- add-stdcall-alias
NetBeans работает с использованием 32-битной Java

Среда (2), в которой выдается ошибка:
ОС: Windows 8.1 64 бит
Java jdk1.8.0_51 (64 бит)
Cygwin 64 бит
Нет опции компилятора
"C:\cygwin64\bin" добавлен в переменную окружения пути
NetBeans работает с использованием 64-битной Java

Ошибка:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180126947, pid=7528, tid=20276
#
# JRE version: Java(TM) SE Runtime Environment (8.0_51-b16) (build 1.8.0_51-b16)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.51-b03 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [cygwin1.dll+0xe6947]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows

Пожалуйста, дайте мне знать, если нужна дополнительная информация

1 ответ

Решение

Я воспроизвожу проблему, а затем покажу, как ее решить:

mdorey @ VXD0141 ~ / tmp
$ cat avajjni / AvajJNI.java
пакет аваджни;
открытый класс AvajJNI {
    статическая {
    // Environment (1)
    //System.load("D:\\cpro\\c_jni_library\\dist\\Debug\\MinGW_32-Windows\\libc_jni_library.dll ");

    // Environment (2)
    System.load ("C: \\ \\ cygwin64 домой \\ mdorey \\ TMP \\libc_jni_library.dll");
    }
    public native void fnDisplayData();
    public static void main(String[] args) {
        AvajJNI obj = новый AvajJNI ();
        obj.fnDisplayData ();
    }
}

mdorey @ VXD0141 ~ / tmp
$ cat AvajJNI.c 
#include "stdio.h"

typedef unsigned long long __int64;
#include "avajjni_AvajJNI.h"

JNIEXPORT void JNICALL Java_avajjni_AvajJNI_fnDisplayData
  (JNIEnv * env, jobject obj) {
    printf ("Метод JNI вызван \ n");
}

mdorey @ VXD0141 ~ / tmp
$ javac avajjni / AvajJNI.java

mdorey @ VXD0141 ~ / tmp
$ javah avajjni.AvajJNI

mdorey @ VXD0141 ~ / tmp
$ gcc -I / cygdrive / c / Program \ Files / Java / jdk1.8.0_72 / include -I / cygdrive / c / Pro
gram \ Files / Java / jdk1.8.0_72 / include / win32 -o libc_jni_library.dll -shared Avaj
JNI.c 

mdorey @ VXD0141 ~ / tmp
$ java avajjni / AvajJNI
#
# Фатальная ошибка была обнаружена средой выполнения Java:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) при pc=0x0000000180185145, pid=8780, tid=7560
#
# Версия JRE: Java(TM) SE Runtime Environment (8.0_72-b15) (сборка 1.8.0_72-b15)
# Java VM: 64-разрядная серверная виртуальная машина Java HotSpot(TM) (сжатый режим Windows-amd64 в смешанном режиме 25.72-b15)
# Проблемная рамка:
# C  [cygwin1.dll+0x145145]
#
# Не удалось записать дамп ядра. Минидампы не включены по умолчанию в клиентских версиях Windows
#
# Файл отчета об ошибке с дополнительной информацией сохраняется как:
# C:\cygwin64\home\mdorey\tmp\hs_err_pid8780.log
#
# Если вы хотите отправить отчет об ошибке, посетите:
#   http://bugreport.java.com/bugreport/crash.jsp
# Сбой произошел за пределами виртуальной машины Java в собственном коде.
# Смотрите проблемный кадр, где сообщать об ошибке.
#

mdorey @ VXD0141 ~ / tmp
$ / cygdrive / c / Program \ Files / software.jessies.org / terminator / Resources / salma-ha
yek /.generated / amd64_Cygwin / bin / java-launcher.exe avajjni / AvajJNI
Метод JNI называется

mdorey @ VXD0141 ~ / tmp
$ 

/questions/5424063/ispolzovanie-java-jni-na-cygwin/5424071#5424071

Другие вопросы по тегам