与JNI共享库:如何维护全局变量?

时间:2013-03-26 13:10:42

标签: android c java-native-interface shared-libraries shared-memory

我编写了一个共享库,可以通过我的linux系统和java的JNI调用来访问。

该库应该有一个全局的ringbuffer,它必须在JNI方法和其他本机方法中可用。

我认为这不会是一个问题,因为当我从不同的程序访问SL时,全局变量总是如此。

但是现在,在我的JNI方法中,全局变量似乎没有初始化(它们应该在程序流强制它时)。

以下是我的例子:

ringbuf_t ringbuffer;

void internalMethod() {
    // this method is first called from system-program
    ringbuffer = ringbuf_new(5000);
}


JNIEXPORT jint JNICALL Java_example_read(JNIEnv *env, jobject This) {
    // this method is later called via JNI
    if (!ringbuffer) {
        LOGI("uhhh, why is that buffer not set?!");
    }
}

我需要做些什么来使ringbuffer-variable真正全局化,以便每个实例/对共享库的调用都访问该变量的同一个实例?

1 个答案:

答案 0 :(得分:0)

从评论中看来,你似乎想在一个过程中分配你的记忆并在另一个过程中使用它。

为此目的,查看共享内存可能是一个好主意:'man shmget'应该是一个好的开始。

请注意,这与JNI没有特别关系,并且是对操作系统的限制。

编辑: 我建议你:

  1. 阅读共享内存 - 您应该了解其工作原理的概念。
  2. 首先尝试在2个简单应用程序之间共享内存
  3. 只有在您的JNI应用程序中实现
相关问题