我正在使用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'
我不确定是什么问题。
答案 0 :(得分:1)
这里的问题是范围之一。
extern JNIEnv *env;
在全局范围内。这意味着它是与
不同的变量JNIEnv *env = nullptr;
您在main
中声明的,因为它的范围是main
。你需要放
JNIEnv *env = nullptr;
在单个cpp文件的全局空间中以便对其进行定义。