Это не создаст Java VM (JNI) - PullRequest
4 голосов
/ 03 апреля 2010

Мое простое приложение для командной строки:

int _tmain(int argc, _TCHAR* argv[])
{
 JavaVM *jvm;
 JNIEnv *env;
 JavaVMInitArgs vm_args;
 JavaVMOption options[1];
 options[0].optionString = "-Djava.class.path=."; //Path to the java source code
 vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
 vm_args.nOptions = 1;
 vm_args.options = options;
 vm_args.ignoreUnrecognized = 0;

 jint ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
 return 0;
}

дает мне:

Error occurred during initialization of VM
Unable to load native library: Can't find dependent libraries

Точка останова на «return 0» никогда не достигаетсяjvm.dll находится в том же каталоге, что и мое приложение командной строки.

Я не понимаю, что не так.Есть идеи?Спасибо заранее

Ответы [ 2 ]

5 голосов
/ 03 апреля 2010

Я думаю, что на вашу проблему ответил этот вопрос в Sun JNI FAQ.

TL; версия DR: не перемещать библиотеки установки JVM.

2 голосов
/ 16 февраля 2013

В моем опыте,

Причина

Maybe, JVM.DLL находится ниже по пути.

C: \ Program Files \ Java \ jdk1.6.0_xx \ jre \ bin \ client \ (a)

Папка

и ниже содержит много DLL, необходимых JVM;

C: \ Program Files \ Java \ jdk1.6.0_xx \ jre \ bin \ (b)

Итак, JMV.DLL (который вы динамически связали) пытается найти все DLL s в своей родительской папке (b).

Решение

Не копируйте JVM.DLL в ту же папку, в которой находится ваш .exe !!!! Проверьте системную переменную PATH. Он должен содержать (а) и (б) пути. Если это так, возможно, ваш .exe будет успешно выполнен.

...