我有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