C++ Android NDK与OpenGLES2未定义的对GLC调用的引用

C++ Android NDK与OpenGLES2未定义的对GLC调用的引用,c++,android-ndk,opengl-es-2.0,C++,Android Ndk,Opengl Es 2.0,遵循以下教程:。 创建了所有必要的文件,但在尝试构建时,我发现了以下错误: D:\svn-Genicap3D\trunk\frontend\u android\Genicap3D\app\src\main\jni\core\game.cpp 错误:(6)未定义对“glClearColor”的引用 错误:(14)对“glClear”的引用未定义 game.cpp #include "game.h" #include <GLES2/gl2.h> void on_surface_crea

遵循以下教程:。
创建了所有必要的文件,但在尝试构建时,我发现了以下错误:

D:\svn-Genicap3D\trunk\frontend\u android\Genicap3D\app\src\main\jni\core\game.cpp
错误:(6)未定义对“glClearColor”的引用
错误:(14)对“glClear”的引用未定义

game.cpp

#include "game.h"
#include <GLES2/gl2.h>

void on_surface_created() {
    glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
}

void on_surface_changed() {
    // No-op
}

void on_draw_frame() {
    glClear(GL_COLOR_BUFFER_BIT);
}
game.cpp和.h位于核心映射中,核心映射与.mk文件位于同一映射中

我试图从其他答案中包括很多,但似乎没有一个有效。
请随意要求更多文件。

当您使用Android Studio时,默认情况下会忽略您的Makefiles,并动态生成新的Makefiles,因此OpenGL ES2 lib未被正确引用

Android Studio目前支持NDK构建,但不推荐使用此功能,而更好的方法正在开发中

您仍然可以选择使用它,并在build.gradle中指定需要链接到OpenGL ES的内容:

android {
 ...
 defaultConfig {
        ndk {
            moduleName "game"
            ldLibs "GLESv2"               
        }
    }
}
但在我看来,目前最好的办法是停用内置NDK支持,让您的Makefiles改用:

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

    android {
        ...

        sourceSets.main {
            jniLibs.srcDir 'src/main/libs' //set .so files directory to libs
            jni.srcDirs = [] //disable automatic ndk-build call
        }

        // call regular ndk-build(.cmd) script from app directory
        task ndkBuild(type: Exec) {
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
            } else {
                commandLine 'ndk-build', '-C', file('src/main').absolutePath
            }
        }

        tasks.withType(JavaCompile) {
            compileTask -> compileTask.dependsOn ndkBuild
        }
    }

当您使用Android Studio时,默认情况下会忽略您的makefile,并动态生成新的makefile,因此OpenGL ES2 lib未被正确引用

Android Studio目前支持NDK构建,但不推荐使用此功能,而更好的方法正在开发中

您仍然可以选择使用它,并在build.gradle中指定需要链接到OpenGL ES的内容:

android {
 ...
 defaultConfig {
        ndk {
            moduleName "game"
            ldLibs "GLESv2"               
        }
    }
}
但在我看来,目前最好的办法是停用内置NDK支持,让您的Makefiles改用:

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

    android {
        ...

        sourceSets.main {
            jniLibs.srcDir 'src/main/libs' //set .so files directory to libs
            jni.srcDirs = [] //disable automatic ndk-build call
        }

        // call regular ndk-build(.cmd) script from app directory
        task ndkBuild(type: Exec) {
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
            } else {
                commandLine 'ndk-build', '-C', file('src/main').absolutePath
            }
        }

        tasks.withType(JavaCompile) {
            compileTask -> compileTask.dependsOn ndkBuild
        }
    }

在Android Studio中,您可以进入CMakeLists.txt文件并添加

target_link_libraries(EGL
                      GLESv2)

在Android Studio中,您可以进入CMakeLists.txt文件并添加

target_link_libraries(EGL
                      GLESv2)

你是如何建立你的项目的?您是否尝试过构建hello-gl2 NDK示例?我目前正在尝试,使用Android studio作为IDE。我似乎无法将该示例作为项目运行,也无法将其作为空项目中的导入模块运行。您是如何构建项目的?您是否尝试过构建hello-gl2 NDK示例?我目前正在尝试,使用Android studio作为IDE。我似乎不能像项目一样运行该示例,也不能像空项目中导入的模块一样运行该示例。似乎可以解决问题,但我想ndk现在需要在src/main中?您的ndk源应该位于build.gradle文件中定义的src/main/jni中,而不是位于一个固定位置,但是如果需要,您可以选择另一个位置并相应地修改配置。我似乎无法使其工作,因为您的最后一个选项我无法识别“ndk build.cmd”,然后是命令ndk-build.cmd,结束时退出值为非零1。如果我使用了您的第一个选项,那么我将无法找到“GLESv2”。如果找不到ndk-build.cmd,您应该将ndk的路径添加到环境路径中。这对GLESv2来说很奇怪。。你能给出准确的错误消息吗?我已经将整个ndk文件夹(从下载)复制到src/main/jni,其中有ndk-build.cmd文件,但仍然无法识别(位置是:src/main/jni/ndk build.cmd)。将整个文件夹放在那里后,“GLESv2”中的错误发生了更改:错误:任务“:app:compiledBugndk”的执行失败。错误代码:255输出:“C:\Users\bram\AppData\Local\Android\ndk\prebuild/windows-x86\u 64/bin/make.exe”:中断/异常捕获(代码=0xc00000fd,地址=0000000000 420386)似乎可以解决,但我想ndk现在需要在src/main中?您的ndk源应该位于build.gradle文件中定义的src/main/jni中,而不是位于一个固定位置,但是如果需要,您可以选择另一个位置并相应地修改配置。我似乎无法使其工作,因为您的最后一个选项我无法识别“ndk build.cmd”,然后是命令ndk-build.cmd,结束时退出值为非零1。如果我使用了您的第一个选项,那么我将无法找到“GLESv2”。如果找不到ndk-build.cmd,您应该将ndk的路径添加到环境路径中。这对GLESv2来说很奇怪。。你能给出准确的错误消息吗?我已经将整个ndk文件夹(从下载)复制到src/main/jni,其中有ndk-build.cmd文件,但仍然无法识别(位置是:src/main/jni/ndk build.cmd)。将整个文件夹放在那里后,“GLESv2”中的错误发生了更改:错误:任务“:app:compiledBugndk”的执行失败。错误代码:255输出:“C:\Users\bram\AppData\Local\Android\ndk\prebuild/windows-x86\u 64/bin/make.exe”:捕获中断/异常(代码=0xc00000fd,地址=0000000000 420386)