我难住这个。 我有在Ubuntu 11和MacOSX上运行的JNI代码,但会导致Windows出现问题。
JRE版本:6.0_31-b05操作系统:带有gcc的Windows XP 4.修改jni_md.h以避免_int64编译错误: http ://www.vtk.org/pipermail/vtkusers/2006-May/085047.html
代码是使用Maven构build和运行的。 运行我们在Ubuntu 11和MacOSX上完美运行的unit testing时发生错误。
一些观察。
1)有一个函数返回String。 这会导致unit testing冻结。 这是签名。
JNIEXPORT jstring JNICALL Java_com_ctrlworks_puppet_driver_DefaultDriver_Get_1FW_1Version( JNIEnv *env, jobject obj) {
2)从被调用中取出函数并修改unit testing,使得unit testing无误地运行,但在出口时导致访问冲突。
堆栈跟踪:
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环境。
你绝对不想构建一个针对cygwin.dll的JNI库。 cygwin中没有任何你想要的最终的JNI库。
用MSVC,mingw构建,或者使用cygwin gcc使用-mno-cygwin标志。