Moinsen,
ich versuch gerade seit langem mal wieder mit dem JNI warm zu werden, doch so richtig will es mir nicht gelingen.
Kurz zum Set-Up:
- JDK 1.8
- Cygwin (64bit) Compiler
- Windoof 8 64Bit
Beim erstellen der Java-Datei / der DLL-Datei läuft alles glatt. Keine Fehler.
Sobald ich die Java-Datei ausführe bekomme ich einen
Alle von mir unten aufgeführten Dateien befinden sich im selben Verzeichnis.
Mein Vorgehen: (hab das ganze aufs nötigste runter gebrochen)
(1) Erstellen der
(2) Java-Datei kompilieren via
(3) HelloJNI.h erstellen lassen via
(4) Anlegen der HelloJNI.c
(5) Erstellen der libHelloImpl.dll
(6) Ausführen der Java-Datei
Hier würde ich euch mal die Log-Datei anhängen.
Vielleicht erkennt ja jemand meinen Fehler oder es hat noch jemand eine Anregung zur Lösung des Problems.
Achja ... ich hab es auch schon mit nem MinGW Compiler versucht - selbes Ergebnis.
Auch das festlegen der C-Version auf eine neuere Version (was mir von einem Kollegen geraten wurde) hat nicht geholfen.
Grüße
Robert
ich versuch gerade seit langem mal wieder mit dem JNI warm zu werden, doch so richtig will es mir nicht gelingen.
Kurz zum Set-Up:
- JDK 1.8
- Cygwin (64bit) Compiler
- Windoof 8 64Bit
Beim erstellen der Java-Datei / der DLL-Datei läuft alles glatt. Keine Fehler.
Sobald ich die Java-Datei ausführe bekomme ich einen
FATAL ERROR
und es wird eine log Datei erstellt.Alle von mir unten aufgeführten Dateien befinden sich im selben Verzeichnis.
Mein Vorgehen: (hab das ganze aufs nötigste runter gebrochen)
(1) Erstellen der
HelloJNI.java
Datei
Java:
public class HelloJNI {
static {
System.loadLibrary("libHelloImpl");
}
private native void sayHello();
public HelloJNI() {
sayHello();
}
public static void main(String[] args) {
new HelloJNI();
}
}
(2) Java-Datei kompilieren via
javac HelloJNI.java
(3) HelloJNI.h erstellen lassen via
javah HelloJNI
C:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloJNI */
#ifndef _Included_HelloJNI
#define _Included_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
(4) Anlegen der HelloJNI.c
C:
#include <stdio.h>
#include "HelloJNI.h"
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject obj)
{
printf("Test123");
return;
}
(5) Erstellen der libHelloImpl.dll
C:
gcc -I"%JAVA_HOME%/include" -I"%JAVA_HOME%/include/win32" -shared -o libHelloImpl.dll HelloJNI.c
(6) Ausführen der Java-Datei
Hier würde ich euch mal die Log-Datei anhängen.
Code:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000180116d47, pid=8072, tid=3180
#
# JRE version: Java(TM) SE Runtime Environment (8.0_45-b15) (build 1.8.0_45-b15)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [cygwin1.dll+0xd6d47]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
--------------- T H R E A D ---------------
Current thread (0x0000000002982800): JavaThread "main" [_thread_in_native, id=3180, stack(0x00000000025a0000,0x00000000026a0000)]
siginfo: ExceptionCode=0xc0000005, writing address 0x00000005e2cb0000
Registers:
RAX=0x00000005e2cb0000, RBX=0x00000000170a0260, RCX=0x00000005e2cb3030, RDX=0x000000000269f2a8
RSP=0x000000000269f1e0, RBP=0x000000000269f210, RSI=0x0000000000000021, RDI=0x00000000ffffffff
R8 =0x0000000000000004, R9 =0x0000000002568210, R10=0x00000000026a0000, R11=0x00000005e2cb10ac
R12=0x0000000000000000, R13=0x00000000170a0260, R14=0x000000000269f2a8, R15=0x0000000002982800
RIP=0x0000000180116d47, EFLAGS=0x0000000000010202
Top of Stack: (sp=0x000000000269f1e0)
0x000000000269f1e0: 000000018018c780 0000000180116d5b
0x000000000269f1f0: 000000000269f500 0000000002982800
0x000000000269f200: 00000000170a0260 0000000000000021
0x000000000269f210: 000000000269f288 0000000002a95e34
0x000000000269f220: 00000000029829f8 000000000269f2a8
0x000000000269f230: 0000000000000021 0000000002982800
0x000000000269f240: 0000000002a95b62 000000000269f248
0x000000000269f250: 00000000170a0260 000000000269f2a8
0x000000000269f260: 00000000170a04a0 0000000000000000
0x000000000269f270: 00000000170a0260 0000000000000000
0x000000000269f280: 000000000269f2a8 000000000269f2f0
0x000000000269f290: 0000000002a87ced 0000000000000000
0x000000000269f2a0: 0000000002a8f978 00000000d5970058
0x000000000269f2b0: 000000000269f2b0 00000000170a02fd
0x000000000269f2c0: 000000000269f300 00000000170a04a0
0x000000000269f2d0: 0000000000000000 00000000170a0308
Instructions: (pc=0x0000000180116d47)
0x0000000180116d27: 04 f3 90 eb e3 48 c7 c0 08 00 00 00 49 0f c1 82
0x0000000180116d37: 50 e4 ff ff 4c 8d 1d 19 00 00 00 4c 87 5c 24 08
0x0000000180116d47: 4c 89 18 41 ff 82 44 e4 ff ff 41 ff 8a 4c e4 ff
0x0000000180116d57: ff 58 ff e0 65 4c 8b 14 25 08 00 00 00 41 bb 01
Register to memory mapping:
RAX=0x00000005e2cb0000 is an unknown value
RBX={method} {0x00000000170a0268} 'sayHello' '()V' in 'HelloJNI'
RCX=0x00000005e2cb3030 is an unknown value
RDX=0x000000000269f2a8 is pointing into the stack for thread: 0x0000000002982800
RSP=0x000000000269f1e0 is pointing into the stack for thread: 0x0000000002982800
RBP=0x000000000269f210 is pointing into the stack for thread: 0x0000000002982800
RSI=0x0000000000000021 is an unknown value
RDI=0x00000000ffffffff is an unallocated location in the heap
R8 =0x0000000000000004 is an unknown value
R9 =0x0000000002568210 is an unknown value
R10=0x00000000026a0000 is pointing into the stack for thread: 0x0000000002982800
R11=0x00000005e2cb10ac is an unknown value
R12=0x0000000000000000 is an unknown value
R13={method} {0x00000000170a0268} 'sayHello' '()V' in 'HelloJNI'
R14=0x000000000269f2a8 is pointing into the stack for thread: 0x0000000002982800
R15=0x0000000002982800 is a thread
Stack: [0x00000000025a0000,0x00000000026a0000], sp=0x000000000269f1e0, free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [cygwin1.dll+0xd6d47]
C [cygwin1.dll+0x14c77f]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j HelloJNI.sayHello()V+0
j HelloJNI.<init>()V+5
j HelloJNI.main([Ljava/lang/String;)V+4
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x0000000018ed9800 JavaThread "Service Thread" daemon [_thread_blocked, id=3916, stack(0x00000000192a0000,0x00000000193a0000)]
0x000000001764a000 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=2020, stack(0x0000000018da0000,0x0000000018ea0000)]
0x0000000017643800 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=6124, stack(0x0000000018ca0000,0x0000000018da0000)]
0x0000000017640800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=7016, stack(0x0000000018ba0000,0x0000000018ca0000)]
0x000000001763e800 JavaThread "Attach Listener" daemon [_thread_blocked, id=6296, stack(0x0000000018aa0000,0x0000000018ba0000)]
0x000000001763d800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=5016, stack(0x00000000189a0000,0x0000000018aa0000)]
0x0000000002a78800 JavaThread "Finalizer" daemon [_thread_blocked, id=7600, stack(0x00000000188a0000,0x00000000189a0000)]
0x0000000002a70000 JavaThread "Reference Handler" daemon [_thread_blocked, id=6052, stack(0x00000000187a0000,0x00000000188a0000)]
=>0x0000000002982800 JavaThread "main" [_thread_in_native, id=3180, stack(0x00000000025a0000,0x00000000026a0000)]
Other Threads:
0x0000000017607800 VMThread [stack: 0x00000000186a0000,0x00000000187a0000] [id=8148]
0x0000000018eda000 WatcherThread [stack: 0x00000000193a0000,0x00000000194a0000] [id=7036]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Heap:
PSYoungGen total 38400K, used 1996K [0x00000000d5900000, 0x00000000d8380000, 0x0000000100000000)
eden space 33280K, 6% used [0x00000000d5900000,0x00000000d5af33f8,0x00000000d7980000)
from space 5120K, 0% used [0x00000000d7e80000,0x00000000d7e80000,0x00000000d8380000)
to space 5120K, 0% used [0x00000000d7980000,0x00000000d7980000,0x00000000d7e80000)
ParOldGen total 87552K, used 0K [0x0000000080a00000, 0x0000000085f80000, 0x00000000d5900000)
object space 87552K, 0% used [0x0000000080a00000,0x0000000080a00000,0x0000000085f80000)
Metaspace used 2443K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 266K, capacity 386K, committed 512K, reserved 1048576K
Card table byte_map: [0x0000000011e40000,0x0000000012240000] byte_map_base: 0x0000000011a3b000
Marking Bits: (ParMarkBitMap*) 0x00000000651d4040
Begin Bits: [0x00000000128f0000, 0x00000000148c8000)
End Bits: [0x00000000148c8000, 0x00000000168a0000)
Polling page: 0x0000000000d10000
CodeCache: size=245760Kb used=1099Kb max_used=1104Kb free=244661Kb
bounds [0x0000000002a80000, 0x0000000002cf0000, 0x0000000011a80000]
total_blobs=253 nmethods=23 adapters=144
compilation: enabled
Compilation events (10 events):
Event: 0.056 Thread 0x000000001764a000 19 3 java.util.Arrays::copyOfRange (63 bytes)
Event: 0.056 Thread 0x000000001764a000 nmethod 19 0x0000000002b8fdd0 code [0x0000000002b8ffe0, 0x0000000002b90b18]
Event: 0.057 Thread 0x0000000017640800 20 4 java.lang.String::charAt (29 bytes)
Event: 0.058 Thread 0x0000000017640800 nmethod 20 0x0000000002b93d10 code [0x0000000002b93e60, 0x0000000002b93f18]
Event: 0.058 Thread 0x000000001764a000 21 3 java.io.WinNTFileSystem::normalize (143 bytes)
Event: 0.059 Thread 0x000000001764a000 nmethod 21 0x0000000002b92f50 code [0x0000000002b93140, 0x0000000002b93968]
Event: 0.059 Thread 0x000000001764a000 23 3 java.lang.String::getChars (62 bytes)
Event: 0.059 Thread 0x000000001764a000 nmethod 23 0x0000000002b92750 code [0x0000000002b92900, 0x0000000002b92d38]
Event: 0.059 Thread 0x000000001764a000 22 3 java.lang.System::getSecurityManager (4 bytes)
Event: 0.059 Thread 0x000000001764a000 nmethod 22 0x0000000002b92450 code [0x0000000002b925a0, 0x0000000002b926d0]
GC Heap History (0 events):
No events
Deoptimization events (0 events):
No events
Internal exceptions (2 events):
Event: 0.026 Thread 0x0000000002982800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; name or signature does not match> (0x00000000d590e310) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u45\3627\hotspot\srM¥Þó}š?
Event: 0.026 Thread 0x0000000002982800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.prefetchRead(Ljava/lang/Object;J)V name or signature does not match> (0x00000000d590e5a0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u45\3627\hotspot\src\share\vm\prims\j
Events (10 events):
Event: 0.056 loading class java/security/BasicPermissionCollection
Event: 0.056 loading class java/security/BasicPermissionCollection done
Event: 0.056 loading class sun/launcher/LauncherHelper$FXHelper
Event: 0.056 loading class sun/launcher/LauncherHelper$FXHelper done
Event: 0.056 loading class java/lang/Class$MethodArray
Event: 0.056 loading class java/lang/Class$MethodArray done
Event: 0.056 loading class java/lang/Void
Event: 0.056 loading class java/lang/Void done
Event: 0.057 loading class java/lang/ClassLoaderHelper
Event: 0.057 loading class java/lang/ClassLoaderHelper done
Dynamic libraries:
0x000007f740040000 - 0x000007f740077000 C:\Program Files\Java\jdk1.8.0_45\bin\java.exe
0x000007fe1b190000 - 0x000007fe1b34d000 C:\WINDOWS\SYSTEM32\ntdll.dll
0x000007fe18ae0000 - 0x000007fe18c17000 C:\WINDOWS\system32\KERNEL32.DLL
0x000007fe18460000 - 0x000007fe18554000 C:\WINDOWS\system32\KERNELBASE.dll
0x000007fe19100000 - 0x000007fe191de000 C:\WINDOWS\system32\ADVAPI32.dll
0x000007fe1b040000 - 0x000007fe1b18c000 C:\WINDOWS\system32\USER32.dll
0x000007fe154a0000 - 0x000007fe1570a000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9200.17359_none_4188b989718cf1c6\COMCTL32.dll
0x000007fe19410000 - 0x000007fe194b5000 C:\WINDOWS\system32\msvcrt.dll
0x000007fe1ae40000 - 0x000007fe1ae88000 C:\WINDOWS\SYSTEM32\sechost.dll
0x000007fe18d70000 - 0x000007fe18eb5000 C:\WINDOWS\system32\RPCRT4.dll
0x000007fe18c20000 - 0x000007fe18d61000 C:\WINDOWS\system32\GDI32.dll
0x000007fe190b0000 - 0x000007fe190e9000 C:\WINDOWS\system32\IMM32.DLL
0x000007fe1a7c0000 - 0x000007fe1a8d5000 C:\WINDOWS\system32\MSCTF.dll
0x00000000648f0000 - 0x00000000649c2000 C:\Program Files\Java\jdk1.8.0_45\jre\bin\msvcr100.dll
0x00000000649d0000 - 0x0000000065253000 C:\Program Files\Java\jdk1.8.0_45\jre\bin\server\jvm.dll
0x000007fe0e1b0000 - 0x000007fe0e1b9000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
0x000007fe143e0000 - 0x000007fe14400000 C:\WINDOWS\SYSTEM32\WINMM.dll
0x000007fe157e0000 - 0x000007fe157e9000 C:\WINDOWS\SYSTEM32\VERSION.dll
0x000007fe1aba0000 - 0x000007fe1aba7000 C:\WINDOWS\system32\PSAPI.DLL
0x000007fe189d0000 - 0x000007fe18a28000 C:\WINDOWS\system32\WS2_32.dll
0x000007fe143a0000 - 0x000007fe143d3000 C:\WINDOWS\SYSTEM32\WINMMBASE.dll
0x000007fe1a7b0000 - 0x000007fe1a7b9000 C:\WINDOWS\system32\NSI.dll
0x000007fe180d0000 - 0x000007fe1811f000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
0x000007fe18120000 - 0x000007fe18142000 C:\WINDOWS\system32\DEVOBJ.dll
0x00000000648a0000 - 0x00000000648af000 C:\Program Files\Java\jdk1.8.0_45\jre\bin\verify.dll
0x0000000064870000 - 0x0000000064899000 C:\Program Files\Java\jdk1.8.0_45\jre\bin\java.dll
0x0000000064850000 - 0x0000000064866000 C:\Program Files\Java\jdk1.8.0_45\jre\bin\zip.dll
0x000007fe194c0000 - 0x000007fe1a7a5000 C:\WINDOWS\system32\SHELL32.dll
0x000007fe1ae90000 - 0x000007fe1b040000 C:\WINDOWS\SYSTEM32\combase.dll
0x000007fe188e0000 - 0x000007fe18930000 C:\WINDOWS\system32\SHLWAPI.dll
0x000007fe171e0000 - 0x000007fe17276000 C:\WINDOWS\SYSTEM32\SHCORE.dll
0x000007fe180b0000 - 0x000007fe180c5000 C:\WINDOWS\system32\profapi.dll
0x00000005e2cb0000 - 0x00000005e2cc8000 D:\Programmieren\Programmierung\Java\JNITest\libHelloImpl.dll
0x0000000180040000 - 0x0000000180610000 C:\cygwin64\bin\cygwin1.dll
0x000007fe10400000 - 0x000007fe10563000 C:\WINDOWS\SYSTEM32\dbghelp.dll
Vielleicht erkennt ja jemand meinen Fehler oder es hat noch jemand eine Anregung zur Lösung des Problems.
Achja ... ich hab es auch schon mit nem MinGW Compiler versucht - selbes Ergebnis.
Auch das festlegen der C-Version auf eine neuere Version (was mir von einem Kollegen geraten wurde) hat nicht geholfen.
Grüße
Robert