在 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 中以便对其进行定义。
我正在使用 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 中以便对其进行定义。