_main我得到这个错误从测试JNI:Xcode中给出的Mach-O连接器错误: “_JNI_CreateJavaVM”,从引用:在main.o中
Undefined symbols for architecture x86_64:
"_JNI_CreateJavaVM", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这里是C++代码:
#include <jni.h>
#include <iostream>
using namespace std;
int main()
{
int res;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
JavaVM *jvm;
JNIEnv *env;
jmethodID mid;
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path = /Users/stephen/course/test/Test";
options[2].optionString = "-verbose:NONE";
vm_args.version = JNI_VERSION_1_8;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);
if(res == JNI_ERR){
cout << "Error invoking the JVM";
return 1;
}
cout <<"create JVM successfully!"<<endl;
jclass cls = env->FindClass("/Users/stephen/course/Qt-project/test/Test");
if(cls != 0){
cout<<"find class successfully!" << endl;
}
mid = env->GetMethodID(cls,"sayHello","stephen");
if(mid != 0){
cout<<"Invoke method successfully!" << endl;
}
jvm->DestroyJavaVM();
return 0;
}
下面是Java代码:
public class Test
{
public static void sayHello(String s){
System.out.print("hello I am" + s + "\n");
}
}
我添加了包括路径 “JDK /包括:JDK /包括/达尔文” 的项目,我也加上 “JDK/JRE/lib目录/服务器” 的库路径到该项目获取libjvm.dylib。我的项目的C++标准库的libstdC++(GNU C++标准库 但正如预期的我也解决不了这个问题
我叉你的回购(recipeNo028),并成功地使用“make”命令。但程序recipeNo028_main需要Java SE6运行环境。不过,我已经安装了JDK8。我不知道为什么它需要Java SE6。我的教授还希望我使用6个以上的Java版本来研究JNI并解决一些问题。 –