Нарушение доступа 0xc0000005 при выходе с кодом JNI Cygwin в Windows XP - PullRequest
3 голосов
/ 20 марта 2012

Я в замешательстве.У меня есть код JNI, который работает в Ubuntu 11 и MacOSX, но вызывает проблемы с Windows.

Версия JRE: 6.0_31-b05 ОС: Windows XP с gcc 4. Изменен файл jni_md.h, чтобы избежать ошибки компиляции _int64: http://www.vtk.org/pipermail/vtkusers/2006-May/085047.html

Код создается и запускается с использованием Maven.Ошибка возникает при запуске нашего модульного теста, который отлично работает на Ubuntu 11 и MacOSX.

Несколько замечаний.

1) Была одна функция, которая возвращает String.Это может привести к зависанию модульного теста.Вот подпись.

JNIEXPORT jstring JNICALL Java_com_ctrlworks_puppet_driver_DefaultDriver_Get_1FW_1Version(
    JNIEnv *env, jobject obj) {

2) Извлечение функции из вызываемого и изменение модульного теста, соответственно, вызывает выполнение модульного теста без ошибок, но вызывает нарушение доступа при выходе.

Трассировка стека:

Current thread (0x02c1ac00):  VMThread [stack: 0x02d00000,0x02d50000] [id=3360]

siginfo: ExceptionCode=0xc0000005, reading address 0x02d4de30

Registers:
EAX=0x02d4ce64, EBX=0x001b2b28, ECX=0x00000001, EDX=0x00000001
ESP=0x02d4fc14, EBP=0x02d4fc5c, ESI=0x02d4fc70, EDI=0x00000000
EIP=0x6102879e, EFLAGS=0x00010212

EAX=
[error occurred during error reporting (printing register info), id 0xc0000005]

Stack: [0x02d00000,0x02d50000],  sp=0x02d4fc14,  free space=319k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [cygwin1.dll+0x2879e]  dll_noncygwin_dllcrt0+0x1e
C  [ntdll.dll+0x118a]  LdrInitializeThunk+0x24
C  [ntdll.dll+0x23aba]  RtlDestroyEnvironment+0x178
C  [kernel32.dll+0x1ca96]  IsValidLocale+0x8eb
C  [kernel32.dll+0x1cb0e]  ExitProcess+0x14
C  [msvcr71.dll+0x8d04]  exit+0x0
C  [msvcr71.dll+0x8d11]  exit+0xd
V  [jvm.dll+0x11d88d]
V  [jvm.dll+0x11cb9e]
V  [jvm.dll+0x11cec2]
V  [jvm.dll+0x11d2d2]
V  [jvm.dll+0x140ffc]
C  [msvcr71.dll+0x9565]  endthreadex+0xa0
C  [kernel32.dll+0xb713]  GetModuleFileNameA+0x1b4

VM_Operation (0x009efb80): Exit, mode: safepoint, requested by thread 0x003b7000

Ваша помощь наиболее ценится.Я новичок в Windows, и это не помогает.Я пытался заглянуть в Visual C ++ 2010, но получил много ошибок компиляции, поэтому решил, что мне лучше с Cygwin.У нас также есть немного скриптовой логики в BASH, поэтому нам все равно нужна среда Cygwin.

1 Ответ

2 голосов
/ 23 марта 2012

Вы определенно не хотите создать библиотеку JNI против cygwin.dll. В Cygwin нет ничего, что вы хотели бы видеть в своей окончательной библиотеке JNI.

Либо соберите MSVC, mingw, либо используйте флаг -mno-cygwin с помощью cygwin gcc.

...