C++ 使用全局变量的编译器错误';外部';在C++;

C++ 使用全局变量的编译器错误';外部';在C++;,c++,compiler-errors,java-native-interface,global-variables,extern,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_ 但是,每当我尝试构建项目时,都会出现以下错误: myclass.cpp: un

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

CustomLibrary.hh

#ifndef CUSTOMLIBRARY_HH_
#define CUSTOMLIBRARY_HH_

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

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

myclass.cpp: undefined reference to 'env'

我不完全确定问题是什么。

这里的问题是范围问题

extern JNIEnv *env;
在全球范围内。这意味着它与其他变量不同

JNIEnv *env = nullptr;
您在
main
中声明的,因为它的作用域是
main
。你需要把

JNIEnv *env = nullptr;

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

您需要一个
env
的全局变量定义来匹配您的声明。您的
myclass myclass()
不会做您期望它做的事情,并且
myclass myclass::doSomething()无效。我强烈建议你阅读一本C++的书,如果你打算编写这个语言。OOPS意在把MyCase::DOMMETHOTHONE()OP也有其他问题在片段中。谢谢你的评论,这是有意义的,但是我现在已经移动了<代码> JNIENV*Env= nulLPTR;<代码>从main()函数中的行到文件顶部。然而,我仍然得到同样的汇编error@kahamster你是如何编译这些文件的?你需要将它们链接在一起才能工作。哦,愚蠢的我…我忘了用CustomLibrary.hh文件xD更新我的makefile谢谢你Nathan@卡哈斯特:没问题。很乐意帮忙。
JNIEnv *env = nullptr;
JNIEnv *env = nullptr;