我有C++代碼需要在兩個不同的環境中運行 - 一個安裝了Java,一個沒有。在Java環境中,它將需要進行JNI調用。有條件地在C++中調用JNI
我目前的設置如下:
Main.cpp的:
#include "JNIInterface.h"
if(useJNI){
JNIInterface::DoJNIStuff();
} else {
DoNormalStuff();
}
JNIInterface.h:
#include <mutex>
//has no <jni.h> include
...
JNIInterface.cpp:正如預期的那樣
#include "JNIInterface.h"
#include <jni.h>
void JNIInterface::DoJNIStuff()
{ std::call_once(jvmFlag, [](){
//basically all the JVM initialization stuff
});
DoStuff(jvm);
}
,關於非Java env否則會導致「程序無法啓動,因爲您的計算機中缺少JVM.dll」。
似乎唯一的方法是避免在編譯時在預處理器中包含JNI代碼。是否有不同的設置來避免此問題?
這兩個變種真的有必要在一個程序中? (當然可能,但是...)。兩個程序(來自具有不同預處理器的相同代碼)可選地帶有一些起始代碼來檢查Java是否存在並選擇正確的變體,這更容易。 – deviantfan
是的,這是我必須處理的限制。我想即使在我不需要調用Java的情況下,我也會添加jvm.dll。 – zz3599