我用的是java(非安卓),需要实现的是一个C++ JAVA相互调用的功能即: java<--> so <-->c++。另外不存在多线程(c++ so java中都是单线程)
现在遇到如下问题FindClass 返回为空
java的class文件按照包结构已经放在 /mnt/hgfs/debug/linux/webtest/目录下了
jdk版本1.7.0_55
创建JVM
JavaVMOption options[3];
JavaVMInitArgs vm_args;
//各种参数
options[0].optionString= "-Djava.compiler=NONE";
options[1].optionString= "-verbose:NONE";
char achEvnPath[512] = {0};
options[2].optionString= "-Djava.class.path=/mnt/hgfs/debug/linux/webtest/";
vm_args.version=JNI_VERSION_1_6;
vm_args.options=options;
vm_args.nOptions=3;
void* dp = dlopen("libjvm.so", RTLD_LAZY );
if( NULL == dp )
{
printf("libjvm.so dlopen failed!");
return false;
}
printf("libjvm.so dlopen pass\n");
PFunCreateJavaVM funCreateJavaVM = (PFunCreateJavaVM)dlsym(dp, "JNI_CreateJavaVM");
if( NULL == funCreateJavaVM )
{
printf("libjvm.so JNI_CreateJavaVM failed!");
return false;
}
printf("libjvm.so JNI_CreateJavaVM pass\n");
res = funCreateJavaVM(&s_pJVM, (void**)&s_pENV, &vm_args);
//下面一句返回空
jclass m_pcJavaClient = m_pENV->FindClass("com/test/JavaClient");
------解决方案--------------------
楼主在哪里调用这个so文件,必须在java的class中才可以,而且调用jni的这个java的class也必须是在这个目录下
------解决方案--------------------
估计路径问题,你可以把so、java(全路径)、c++代码放到一起,然后把相关路径写在一起并放入环境变量