JNINativeInterface_ * 为空

JNINativeInterface_ * is null

我正在开发 JNI 应用程序。然而,结构 struct JNIEnv_ 内的 JNINativeInterface_ * 为空,因此导致对 JNI(示例:env->NewStringUTF(...))函数的任何调用都抛出分段错误。 JNIEnv_ 结构如下所示:

struct JNIEnv_ {
    const struct JNINativeInterface_ *functions;
.
.
.

老实说,我不知道如何解决这个问题,因为我认为 java 应该在您调用 System.loadLibrary(...) 时填充它。感谢您的帮助。

两种可能性:

1) 您的 C++ 代码作为本机函数从 Java 调用:

例如:

JNIEXPORT void JNICALL Java_MyJNative_doSomething(JNIEnv *env, jobject jo)
{
    std::cout << "doSomething() : ";
}

JNIEnv*指针是Java环境给你的。

2) 您的 C++ 代码通过 JNI 调用 Java 代码:

在这种情况下,您必须按照 JNI 调用逻辑设置 JavaVM*JNIEnv* 指针。参见示例 this article

如果您已经调用 JNIEnv* 但您在 C++ 端使用多个线程,则需要提及一个特殊情况。然后每个线程都必须附加到 JNIEnv* 使用:

JNIEnv *env;                // Pointer to native interface
jint rc = jvm->AttachCurrentThread ((void **)&env, nullptr);  // Attach without addutiobal parameters
                            // where jvm is a valid JavaVM*