我是 C++ 和 JNI 的初学者,我想从我的 C++ 程序中调用 Java 方法。编译(使用 Eclipse)时,出现以下错误:
对“_imp__JNI_CreateJavaVM@12”的未定义引用
我搜索了这个问题并遇到了这个帖子
答案是,如果我做对了,将 jvm 库包括到编译命令中。因为我不是手动编译的,所以我不确定如何让 Eclipse 做到这一点。有人可以为一个完整的初学者逐步解释一下吗?
这是代码,以防编译命令不会更改任何内容并且代码有一些错误。在这部分调用 JNI_CreateJavaVM 时会显示错误:
JNIEnv* create_vm(JavaVM ** jvm) {
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options;
/*
* The following is a little messy, but options.optionString wants a char* not a string
* So I convert the String-path to a char-array
*/
string stringPath = "-Djava.class.path=C:\\Users\\Chris\\workspacejava\\PP\\src\\Tests"; //Path to the java source code
int sLen = stringPath.length();
char javaPath [sLen + 1];
int i = 0;
for(; i < sLen; i++)
{
javaPath[i] = stringPath[i];
}
javaPath[i] = '\0';
options.optionString = javaPath;
vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
vm_args.nOptions = 1;
vm_args.options = &options;
vm_args.ignoreUnrecognized = 0;
int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args); //This call results in the error: undefined reference to '_imp__JNI_CreateJavaVM@12'
if(ret < 0)
printf("\nUnable to Launch JVM\n");
return env;}
在这里我调用这个函数:
int main(int argc, char* argv[])
{
JNIEnv *env;
JavaVM * jvm;
env = create_vm(&jvm);
if (env == NULL)
return 1;
...
int n = jvm->DestroyJavaVM();
return 0;
}
更多信息:(我不知道他们是否有帮助)我使用的是 Windows 7。Eclipse 和 JDK 都是 64 位的。我正在使用 MinGW GCC 来编译我的代码。
我很高兴每一条建议