안녕하세요 아즈라엘 입니다.
jni 를 사용하는 프로젝트에서 ..ndk-build 시 아래와 같은 gcc error 가 발생됩니다.
error message : request for member 'getenv' in something not a structure or union
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
UnionJNIEnvToVoid uenv;
uenv.venv = NULL;
jint result = -1;
JNIEnv* env = NULL;
LOGI("JNI_OnLoad");
if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) { // 이부분에서 발생
LOGE("ERROR: GetEnv failed");
goto bail;
}
env = uenv.env;
if (registerNatives(env) != JNI_TRUE) {
LOGE("ERROR: registerNatives failed");
goto bail;
}
result = JNI_VERSION_1_4;
bail:
return result;
}
굵은 글씨로 된 곳에서 발생되는거 같은데요..
이유는 확실하게 잘 모르겠만... Android.mk 파일에
LOCAL_CFLAGS := -DANDROID_NDK \ -DDISABLE_IMPORTGL
플레그 값 세팅이 되어 있는데 .. 이걸 바꾸면 에러가 더 발생되는거 같은데요..
jni 할때 JNI_OnLoad 이 C style 과 관련이 있는지요?
윽 .. 자답입니다.
code style 때문에 그렇네요.. C/C++ 스타일중에서..
function 호출 시 C 와 C++ 중 정확하게 선택해서 해야 하는데 두개가 섞여서 complie error 를 발생시켰네요..
http://www.netmite.com/android/mydroid/dalvik/docs/jni-tips.html




보통은
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
이렇게 쓰고 있는것 같은데요...