2013-04-08 138 views
3

我想从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.dllwer.dll,根据this提到的dll在Vista和以上版本中使用(我在XP上)。
那么几个问题,我想起:

  • 我如何摆脱呢?
  • 为什么我首先得到这个错误?我无法在XP中加载JVM吗?

我在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 2013-04-08 10:37:03

+0

@Thomas,确实是。 – atoMerz 2013-04-10 11:50:26

回答

5

在您链接的文章下方的讨论主题中有类似的问题。

在那里,用户发现解决方案是确保您的环境变量为PATH中的Java二进制文件的路径。例如:

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

我曾看过这个,并尝试过。但我不知道改变路径需要重新启动。重启后程序工作得很好。 – atoMerz 2013-04-10 11:20:56

+0

其实你的评论是答案的一部分! – nabroyan 2013-07-25 11:54:20

3

还有另外一种方式 - 你可以从一个自定义位置动态加载的jvm.dll并设置的java.library.path变量指向本机库。这样就不必依赖于系统环境PATH。

这里的例子在其他线程:

Creating JVM using JNI in C++ does not return

+0

是的,但这意味着我将不得不手动加载我正在使用的每个函数。可能的,但令人沮丧的不是吗? – atoMerz 2013-09-27 07:21:26

+1

请记住,你仍然需要一个JRE - 说了那么一句,你只加载jvm.dll并指向JRE(libs)的自定义位置。好处是您指定了特定的JRE位置,而不是依赖位于PATH上的JRE位置。您不需要加载任何特定的JRE .dll文件。 – 2013-10-08 12:53:45