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-variableを本当にグローバルにして、共有ライブラリへのすべてのインスタンス/呼び出しがその変数の1つの同じインスタンスにアクセスできるようにするには、何をする必要がありますか?