Программа 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