0

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

该库应该有一个全局环形缓冲区,它必须在 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 变量真正成为全局变量,以便每个实例/对共享库的调用都访问该变量的同一个实例?

4

1 回答 1

0

从评论看来,您似乎想在一个进程中分配内存并在另一个进程中使用它。

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

请注意,这与 JNI 没有特别关系,而是来自操作系统的限制。

编辑:我建议你:

  1. 阅读共享内存-您应该了解其工作原理的概念。
  2. 首先尝试在 2 个简单的应用程序之间共享内存
  3. 然后才在您的 JNI 应用程序中实现
于 2013-03-26T14:23:09.343 回答