2014-12-12 3 views
2

Недавно я начал использовать JNI в своем проекте. Вот мой код:JNI_CreateJavaVM разбивает мою программу без каких-либо сообщений или исключений

options[0].optionString = "-Djava.class.path=."; 
memset(&vm_args, 0, sizeof(vm_args)); 
vm_args.version = JNI_VERSION_1_2; 
vm_args.nOptions = 1; 
vm_args.options = options; 
vm_args.ignoreUnrecognized = JNI_TRUE; 
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 

Он врезается в JNI_CreateJavaVM() и моя программа прерывается без сообщения или исключения.

Visual Studio дает мне:

'SurvivorCore.exe': Loaded 'D:\Develop\Survivor\x86\Debug\SurvivorCore.exe', Symbols loaded. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'D:\Develop\Survivor\x86\Debug\SurvivorLibrary.dll', Symbols loaded. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\msvcp120d.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\msvcr120d.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'D:\Develop\Survivor\x86\Debug\UIAdapterSelector.dll', Symbols loaded. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\mscoree.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\bcryptprimitives.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\combase.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\msvcr120_clr0400.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\c90ef9a73ea0044641d31b19023aad61\mscorlib.ni.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'D:\Develop\Survivor\x86\Debug\UIAdapterSelector.dll', Symbols loaded. 
'SurvivorCore.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\System\1c5fe4cb68f67046baec4c3a854f722f\System.ni.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'SurvivorCore.exe': Loaded 'ImageAtBase0x4940000', Loading disabled by Include/Exclude setting. 
'SurvivorCore.exe': Loaded 'ImageAtBase0x4ab0000', Loading disabled by Include/Exclude setting. 
'SurvivorCore.exe': Unloaded 'ImageAtBase0x4940000' 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\urlmon.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\iertutil.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\wininet.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\userenv.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\profapi.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\secur32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\shell32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\SHCore.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'D:\Develop\Survivor\x86\Debug\CSharpUI2DImpl.dll', Symbols loaded. 
'SurvivorCore.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Drawing\8efdc7a3726640f79d9333da88accaf8\System.Drawing.ni.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Windows.Forms\70c6bf4a51d18b4a9a1805cd48d1caad\System.Windows.Forms.ni.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\uxtheme.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.9600.16384_none_7c55c866aa0c3ff0\comctl32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Configuration\00fc7d14bbb38db00e4103912c041adf\System.Configuration.ni.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\version.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\cryptsp.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\rsaenh.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\bcrypt.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Xml\43edd630a9f8cd6ac38c527b106ec94f\System.Xml.ni.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\kernel.appcore.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\dwmapi.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.9600.17227_none_dad9452e5bcb7986\GdiPlus.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\DWrite.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'D:\Develop\Survivor\x86\Debug\AIAdapterSelector.dll', Symbols loaded. 
'SurvivorCore.exe': Loaded 'D:\Develop\Survivor\x86\Debug\jvm.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\wsock32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\winmm.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\psapi.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\msvcr100.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\ws2_32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\winmmbase.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\nsi.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll', Cannot find or open the PDB file. 
'SurvivorCore.exe': Loaded 'C:\Windows\SysWOW64\devobj.dll', Cannot find or open the PDB file. 
The thread 'Win32 Thread' (0x1404) has exited with code 0 (0x0). 
The thread 'Win32 Thread' (0x13bc) has exited with code 1 (0x1). 
The thread 'Win32 Thread' (0x1010) has exited with code 1 (0x1). 
The thread 'Win32 Thread' (0x16a8) has exited with code 1 (0x1). 
The thread 'Win32 Thread' (0x1a0c) has exited with code 1 (0x1). 
The program '[3292] SurvivorCore.exe: Native' has exited with code 1 (0x1). 
The program '[3292] SurvivorCore.exe: Managed (v4.0.30319)' has exited with code 1 (0x1). 

Этот код в Dll, что моя Exe нагрузку во время выполнения. Мой Exe - это родная программа, а Dll - C++/CIL (потому что я пытаюсь сделать универсальный адаптер для других языков). Моя ОС 64 бит.

Я установил и unistalled JDK & JRE снова и снова.

Я попытался установить только 64-разрядную версию JDK только с 32-разрядной и 32-разрядной и 64-разрядной версиями.

Я хочу скомпилировать обе версии x86 и x64 моей программы.

Также, как правильно установить jvm.dll? Я просто скопирую его в свою папку.

ответ

0

Теперь у меня есть обращайтесь к Load jvm.dll динамически:

typedef jint(JNICALL *pCreateJavaVM)(JavaVM **, void**, void *); 

HINSTANCE hInstance = LoadLibrary(L"C:\\Program Files (x86)\\Java\\jre1.8.0_25\\bin\\client\\jvm.dll"); 
pCreateJavaVM CreateJavaVM = (pCreateJavaVM)GetProcAddress(hInstance, "JNI_CreateJavaVM"); 

options[0].optionString = "-Djava.class.path=."; 
vm_args.version = JNI_VERSION_1_2; 
vm_args.nOptions = 1; 
vm_args.options = options; 
vm_args.ignoreUnrecognized = JNI_TRUE; 
status = CreateJavaVM(&jvm, (void**)&env, &vm_args); 

И это работает ... Я не знаю, почему ...

-1

Аварийная остановка JVM в JNI_CreateJavaVM() обычно вызвана тем, что размеры кучи JVM по умолчанию слишком велики. Попробуйте использовать -Xms и -Xmx опций для настройки размеров, чтобы удовлетворить ваши потребности:

JavaVMInitArgs vm_args; 
memset(&vm_args, 0, sizeof(vm_args)); 

JavaVMOption options[3]; 
memset(&options, 0, sizeof(options)); 

options[0].optionString = "-Djava.class.path=."; 
options[1].optionString = "-Xms1m"; // 1MB 
options[2].optionString = "-Xmx1g"; // 1GB 

vm_args.version = JNI_VERSION_1_2; 
vm_args.nOptions = 3; 
vm_args.options = options; 
vm_args.ignoreUnrecognized = JNI_TRUE; 

status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 

Вы можете задать любой параметр командной строки, вы можете перейти на java.exe:

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

+0

спасибо за ваш ответ, но он по-прежнему падает ... даже я использую «-Xmx128m» ... это связано с расположением jvm.dll? –

+0

Нет. И вы статически связываетесь с функцией, поэтому загрузчик EXE обеспечивает существование DLL до запуска EXE. Так происходит что-то еще. –

+0

Спасибо, просто статическая ссылка не работает. –

Смежные вопросы