我的app.cpp:
#include "app.h"
#include <EGL/egl.h>
#include <EGL/eglext.h>
void
Java_com_geek_hello_FilterStack_nativeEglSetFenceAndWait(JNIEnv* env, jobject thiz) {
EGLDisplay display = eglGetCurrentDisplay();
// Create a egl fence and wait for egl to return it.
// Additional reference on egl fence sync can be found in:
// http://www.khronos.org/registry/vg/extensions/KHR/EGL_KHR_fence_sync.txt
EGLSyncKHR fence = eglCreateSyncKHR(display, EGL_SYNC_FENCE_KHR, NULL);
if (fence == EGL_NO_SYNC_KHR) {
return;
}
...
当我运行ndk-build时,它找不到egl.h中存在的方法,并且没有创建.so。这是日志:
app.cpp:31:72: error: 'eglCreateSyncKHR' was not declared in this scope
后面是属于
的所有KHR方法这是Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
LOCAL_CFLAGS = -Wno-psabi
LOCAL_SRC_FILES := app.cpp
#LOCAL_SHARED_LIBRARIES := libcutils libEGL
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libapp
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2
include $(BUILD_SHARED_LIBRARY)
答案 0 :(得分:5)
您需要添加:
#define EGL_EGLEXT_PROTOTYPES
在#include
行之前(特别是在包括EGL/eglext.h
之前)。
另外(看起来你已经这样做了),你需要至少针对API 14进行构建,因为这是第一个在公共API中公开此函数的API级别。
编辑:或者只是取消注释Android.mk中的行:
#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
答案 1 :(得分:2)
尝试执行以下所有步骤:
http://en.wikibooks.org/wiki/OpenGL_Programming/Android_GLUT_Wrapper
从您提供的日志中,构建找不到EGL库,所以我认为您需要该行
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2
在你的Android.mk中。并确保您的Application.mk包括:
APP_STL := gnustl_static
APP_PLATFORM := android-9
答案 2 :(得分:1)
我认为您应该遵循这些步骤以获得更多理解 steps
并且在制造之前使其变得酸涩