2013-04-08 175 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