使用NDK进行编译会为成功包含的头文件提供错误

Tar*_*nfx 7 java-native-interface android android-ndk

我的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;
  }
  ...
Run Code Online (Sandbox Code Playgroud)

当我运行ndk-build时,它找不到egl.h中存在的方法,并且没有创建.so.这是日志:

app.cpp:31:72: error: 'eglCreateSyncKHR' was not declared in this scope 
Run Code Online (Sandbox Code Playgroud)

其次是属于的所有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)
Run Code Online (Sandbox Code Playgroud)

kel*_*nos 5

你需要添加:

#define EGL_EGLEXT_PROTOTYPES
Run Code Online (Sandbox Code Playgroud)

在你的#include线之前(好吧,特别是在包括之前EGL/eglext.h).

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

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

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
Run Code Online (Sandbox Code Playgroud)