关于使用androidstudio2.2通过CMake,NDK开发OpengGL程序中出现的extern “C”问题

来源:互联网 发布:java判断是否是空格 编辑:程序博客网 时间:2024/06/08 05:52

开发环境android studio 2.2

android 6.0 API23

CMake 3.6.3155560

LLDB2.3.3614996

NDK 14.0.3770861

通过配置CMake的的方式开发NDK程序,如下是可以正常运行的代码:

extern "C" {JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_init(JNIEnv* env, jobject obj){    // TODO    if (g_renderer) {        delete g_renderer;        g_renderer = NULL;    }    printGlString("Version", GL_VERSION);    printGlString("Vendor", GL_VENDOR);    printGlString("Renderer", GL_RENDERER);    printGlString("Extensions", GL_EXTENSIONS);    const char* versionStr = (const char*)glGetString(GL_VERSION);    if (strstr(versionStr, "OpenGL ES 3.") && gl3stubInit()) {        g_renderer = createES3Renderer();    } else if (strstr(versionStr, "OpenGL ES 2.")) {        g_renderer = createES2Renderer();    } else {        ALOGE("Unsupported OpenGL ES version");    }}JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_resize(JNIEnv* env, jobject obj, jint width, jint height){    if (g_renderer) {        g_renderer->resize(width, height);    }}JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_step(JNIEnv* env, jobject obj){    if (g_renderer) {        g_renderer->render();    }}};

如下是会崩溃的程序代码:

extern "C" {JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_init(JNIEnv* env, jobject obj);

JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_resize(JNIEnv* env, jobject obj, jint width, jint he;JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_step(JNIEnv* env, jobject obj);};
JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_init(JNIEnv* env, jobject obj){    // TODO    if (g_renderer) {        delete g_renderer;        g_renderer = NULL;    }    printGlString("Version", GL_VERSION);    printGlString("Vendor", GL_VENDOR);    printGlString("Renderer", GL_RENDERER);    printGlString("Extensions", GL_EXTENSIONS);    const char* versionStr = (const char*)glGetString(GL_VERSION);    if (strstr(versionStr, "OpenGL ES 3.") && gl3stubInit()) {        g_renderer = createES3Renderer();    } else if (strstr(versionStr, "OpenGL ES 2.")) {        g_renderer = createES2Renderer();    } else {        ALOGE("Unsupported OpenGL ES version");    }}
JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_resize(JNIEnv* env, jobject obj, jint width, jint height){    if (g_renderer) {        g_renderer->resize(width, height);    }}JNIEXPORT void JNICALL Java_com_example_administrator_ndk_1test_GLES3JNILib_step(JNIEnv* env, jobject obj){    if (g_renderer) {        g_renderer->render();    }}

原因?



0 0
原创粉丝点击