我的C ++代码需要在两个不同的环境中运行 - 一个安装了Java,一个没有安装。在Java环境中,它需要进行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环境中,它导致“程序无法启动,因为您的计算机缺少JVM.dll”。
似乎唯一的方法是避免在编译时在预处理器中包含JNI代码。是否有不同的设置可以避免此问题?
答案 0 :(得分:2)
既然你提到“DLL”我会假设Windows。简单的解决方案就是延迟加载。这可以防止DLL在启动时加载,但仅在首次调用时加载。如果DLL丢失,没有呼叫,没有负载,没有问题。只是在MSVC中设置。