遵循以下教程:http://www.learnopengles.com/calling-opengl-from-android-using-the-ndk/。
创建了所有必需的文件,但是在尝试构建时出现错误:
D:\ svn-Genicap3D \ trunk \ frontend_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);
}
android.mk
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := libgame
LOCAL_CFLAGS := -Wall -Wextra
LOCAL_LDLIBS := -llog -lnativehelper -lGLESv2
LOCAL_CPP_FEATURES += exceptions
LOCAL_SHARED_LIBRARIES := liblog libnativehelper libGLESv2
LOCAL_SRC_FILES := coreBridge.cpp core/game.cpp
# To build the whole .so
FILE_LIST := $(wildcard $(LOCAL_PATH)/../../../core/src/*.cpp)
LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%) LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../../core/include
include $(BUILD_SHARED_LIBRARY)
game.cpp和.h在核心映射中,该核心映射与.mk文件位于同一映射中
我试图从其他答案中加入很多内容,但似乎都没有用。
随时要求更多文件。
最佳答案
当您使用Android Studio时,默认情况下会忽略您的Makefile文件,并且会即时生成新的Makefile文件,因此未正确引用OpenGL ES2 lib。
目前Android Studio支持NDK构建的功能,但不推荐使用此功能,而更好的方法是在工作中。
您仍然可以选择使用它,并在build.gradle中指定需要链接到OpenGL ES的链接:
android {
...
defaultConfig {
ndk {
moduleName "game"
ldLibs "GLESv2"
}
}
}
但我认为,目前最好的做法是停用内置的NDK支持,并使用您的Makefile:
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
}
}
关于c++ - 带有OpenGLES2的Android NDK对glcalls的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28632750/