带有OpenGLES2的Android NDK对glcalls的未定义引用
Android NDK with OpenGLES2 Undefined reference to glcalls
遵循以下教程: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
}
}
在Android Studio中,您可以进入CMakeLists.txt文件并添加
target_link_libraries(EGL
GLESv2)
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 带有OpenGLES2的Android NDK对glcalls的未定义引用