使用JNI加载另一个JNI库
Using JNI to load another JNI library?
我需要实现一个本地方法,我们说"public native void someFunc();"我有两个库,libabc。So和libdef。So。Java使用System.loadLibrary();加载libc。so(它不实现该方法),但是JNI实现在libdef.so中。目前,我正在lib .so.
中执行以下操作。JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved){
JNIEnv *env;
jclass cls;
jmethodID get_load_id;
jstring name;
jvm->GetEnv((void**)&env, JNI_VERSION_1_4);
cls = env->FindClass("java/lang/System");
get_load_id = env->GetStaticMethodID(cls, "load", "(Ljava/lang/String;)V");
name = env->NewStringUTF("/lib/libdef.so");
env->CallStaticVoidMethod(cls, get_load_id, name);
return JNI_VERSION_1_4;
}
然而,我得到一个错误(从android logcat)"JNI_OnLoad返回/lib/libdef中的错误版本(-1)。"如果我加载libdef。直接从Java中,我不会得到这个错误。此外,如果我创建另一个本机方法"loadDef()"并用相同的代码实现它,它也可以工作。问题,我认为,是使用jvm->GetEnv(),但我不确定。此外,我甚至不知道这是否允许我实现我想要的(使用一个JNI库来加载另一个库来实现)。我这样做的原因很复杂,但没有其他选择。
虽然我仍然没有解决在JNI_OnLoad中加载另一个JNI库的问题,但我找到了调用的第一个本机函数,替换了它,并在该函数中运行loadLibrary代码。然后我从JNI再次调用本机方法,它运行新版本的方法。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- Java加载DLL,该DLL从JNI中的另一个DLL导出方法
- Android Studio使用JNI来构建C/C ,但是C/C 需要另一个lib.a,如何解决
- 用C++为java构建一个dll,它正在调用另一个dll(Eclipse上的JNI)
- 从 ndk 中的 jni 方法调用另一个C++方法
- JNI和另一个线程出现ArrayStoreException错误
- JNI - 创建另一个C++类的实例
- 如何从文件中的类调用,以使用着色器显示在另一个包含gl代码的文件中(其中两个文件都在jni文件夹中)
- 另一个 JNI、C++、DLL、UnsatisfiedLinkError <Native Method>
- JNI包装另一个库
- 从另一个Class JNI获取Class对象
- JNI DLL的依赖关系,它在内部调用另一个DLL
- 使用JNI加载另一个JNI库
- 另一个与JNI相关的java.lang.UnsisfiedLinkError