在C ++头文件中使用全局变量'extern'的编译器错误

时间:2018-11-19 17:05:14

标签: c++ compiler-errors java-native-interface global-variables extern

我正在使用Java本机接口,并试图使JNIEnv环境指针(* env)成为全局变量。我将eclipse与g ++一起使用,并且具有以下文件:

CustomLibrary.hh

#ifndef CUSTOMLIBRARY_HH_
#define CUSTOMLIBRARY_HH_

#include <jni.h>
extern JNIEnv *env;

#endif /* CUSTOMLIBRARY_HH_

main.cpp:

#include <jni.h>
#include "CustomLibrary.hh"

int main()
{
    //create java virtual machine

   JavaVM *javaVM = nullptr; 
   JNIEnv *env = nullptr;
   long flag = JNI_CreateJavaVM(&javaVM, (void**)&env, &vmArgs);

   if (flag == JNI_ERR)

   //call some other class method which uses the env global variable
   myclass MYCLASS();
   MYCLASS::doSomething();
}

myclass.cpp

#include "CustomLibrary.hh"

myclass::doSomething()
{
    anotherFunction(env);    
}

但是,每当我尝试构建项目时,都会出现以下错误:

myclass.cpp: undefined reference to 'env'

我不确定是什么问题。

1 个答案:

答案 0 :(得分:1)

这里的问题是范围之一。

extern JNIEnv *env;

在全局范围内。这意味着它是与

不同的变量
JNIEnv *env = nullptr;
您在main中声明的

,因为它的范围是main。你需要放

JNIEnv *env = nullptr;

在单个cpp文件的全局空间中以便对其进行定义。