Ошибка компилятора с использованием глобальных переменных 'extern' в заголовочных файлах на C ++ - PullRequest
0 голосов
/ 19 ноября 2018

Я использую собственный интерфейс 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 голосов
/ 19 ноября 2018

Проблема здесь одна из области видимости.

extern JNIEnv *env;

находится в глобальном масштабе. Это означает, что это переменная, отличная от

JNIEnv *env = nullptr;

, который вы объявляете в main, поскольку он ограничен main. Вам нужно поставить

JNIEnv *env = nullptr;

в глобальном пространстве одного файла cpp для его определения.

...