我正在打开一个文件,以使用Java的assetmanager在本机环境中读取。我希望在init上只打开一次该文件,然后多次使用文件中定义的功能。为此,我需要将资产管理器保持全局。我目前在C ++中具有以下功能:

extern "C" {

JNIEXPORT jstring JNICALL
Java_com_torch_torchdemo_TorchDemo_callTorch( JNIEnv* env,
                                            jobject thiz,
                                            jobject assetManager) {
// get native asset manager
if(globalManager == NULL){
jobject globalManager = env->NewGlobalRef(assetManager)
AAssetManager* manager = AAssetManager_fromJava(env, globalManager);
}


但是,这抱怨没有定义globalManager。这是有道理的,因为在初始化时不是。我找不到有关如何解决此问题的参考。大多数全局引用问题都与保持对对象的引用有关。但是,我需要保留对AAssetManager的引用。

最佳答案

但是,这抱怨没有定义globalManager。


当然可以。没有定义。


  这是有道理的,因为在初始化时不是。我找不到有关如何解决此问题的参考。


错误,您是否考虑过定义它?

显然,您需要的是在全局范围内的“静态jobject globalManager”声明,而不是您首次尝试使用它后在块中声明的localvariable。

10-07 21:06