【发布时间】:2013-06-08 21:11:31
【问题描述】:
我是 C++ 和 JNI 的初学者,我想从我的 C++ 程序中调用 Java 方法。 编译(使用 Eclipse)时出现以下错误:
对“_imp__JNI_CreateJavaVM@12”的未定义引用
我搜索了这个问题,遇到了this post
答案是,如果我做对了,将 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 来编译我的代码。
我很高兴收到每条建议
【问题讨论】:
-
Eclipse CDT 支持各种工具链(例如 MinGW GCC、MSVC、Cygwin GCC)。你在这个项目中使用的是哪一个?
-
我现在正在使用 MinGW GCC。但如果这会有所作为,我可以很容易地改变它。
标签: c++ eclipse java-native-interface undefined