7

我的 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)
4

3 回答 3

5

您需要添加:

#define EGL_EGLEXT_PROTOTYPES

在您的#include台词之前(嗯,特别是在 include 之前EGL/eglext.h)。

此外(看起来您已经在这样做了),您需要至少针对 API 14 进行构建,因为这是在公共 API 中公开此功能的第一个 API 级别。

编辑:或者只是取消注释您的 Android.mk 中的行:

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
于 2012-08-29T09:46:02.730 回答
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
于 2012-08-23T12:38:58.650 回答
0

我认为您应该按照此步骤进行更多理解 步骤

在做bulid之前请先做酸

  • 项目路径直到 jni 文件夹 > 和 ndk 路径直到 ndk-build ex D:\New_Wok_2\Firstndk\jni>c:\android-ndk-r8\ndk-build 并清理您的项目
于 2012-08-31T06:56:44.217 回答