2013-04-08 5 views
3

Я пытаюсь запустить код Java из C, используя код, взятый из here. Код, который пытается запустить JVM следующим образом: однакоНе удается загрузить JVM

JNIEnv *env; 
    JavaVMInitArgs vm_args; 
    JavaVMOption options; 
    options.optionString = "-Djava.class.path=D:\\Java Src\\TestStruct"; 
    vm_args.version = JNI_VERSION_1_6; 
    vm_args.nOptions = 1; 
    vm_args.options = &options; 
    vm_args.ignoreUnrecognized = 0; 

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

код компилируется нормально, когда я пытаюсь выполнить его я получаю следующее сообщение об ошибке:

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

Глядя на this вопрос я использовал зависимость ходок, чтобы узнать, какие двоичные файлы мне не хватает. Оказывается, мне не хватает ieshims.dll и wer.dll с моего компьютера, который согласно this указанные DLL используются в Vista и выше (я нахожусь на XP).
Так несколько вопросов приходят на ум:

  • Как избавиться от этого?
  • Почему я получаю эту ошибку в первую очередь? Я не могу загрузить JVM в XP?

Я нахожусь в Windows XP, используя Visual Studio 2008, установлен JDK 1.7 (тоже с 1.6).

+1

Они могут вводить в заблуждение, не связанных между собой ошибок: http://stackoverflow.com/questions/2465111/dependency-walker-reports-ieshims-dll-and-wer -dll-missing – Thomas

+0

@ Томас, они были. – atoMerz

ответ

5

Аналогичный вопрос в теме обсуждения ниже статьи, которую вы связали.

В нем пользователь обнаружил, что решение состоит в том, чтобы убедиться, что у вас есть путь к вашим двоичным файлам Java в переменной окружения PATH. Например:

PATH = "C:\Program Files\Java\jdk1.6.0_18\jre\bin\client";... 
+3

Я видел это и пробовал. Но я не знал, что изменение пути требует перезагрузки. После перезагрузки программы работают нормально. – atoMerz

+0

На самом деле ваш комментарий является частью ответа! – nabroyan

3

Там другой способ - вы можете загрузить динамически jvm.dll из пользовательского места и установить java.library.path переменных, указывающий на родную LIBS. Таким образом, он не должен зависеть от системы env PATH.

Вот пример в другом потоке:

Creating JVM using JNI in C++ does not return

+0

Правда, но это означает, что мне придется вручную загружать каждую функцию, с которой я работаю. Возможно, но разочарование не так ли? – atoMerz

+1

Помните, что вам все еще нужна JRE - если вы сказали, вы загружаете jvm.dll и указываете пользовательское местоположение JRE (libs). Преимущество состоит в том, что вы указываете конкретное местоположение JRE вместо того, чтобы полагаться на место, расположенное на PATH. Вам не нужно будет загружать какие-либо конкретные файлы JRE .dll. –

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