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

Compiler error using global variables 'extern' in header files in C++

我正在使用 Java 本机接口并尝试使 JNIEnv 环境指针 (*env) 成为全局变量。我正在使用带有 g++ 的 eclipse,我有以下文件:

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'

我不太确定问题出在哪里。

这里的问题是范围之一。

extern JNIEnv *env;

在全球范围内。这意味着它是一个不同于

的变量
JNIEnv *env = nullptr;

您在 main 中声明,因为它的范围是 main。你需要放

JNIEnv *env = nullptr;

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