Android 使用NDK编译会导致成功包含的头文件出错

Android 使用NDK编译会导致成功包含的头文件出错,android,android-ndk,java-native-interface,Android,Android Ndk,Java Native Interface,My 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 fenc

My 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;
  }
  ...
然后是属于

这里是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)

请尝试执行中的所有步骤:

从您提供的日志中,构建无法找到EGL库,因此我认为您需要该行

LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv2
在你的Android.mk中。并确保您的Application.mk包括:

APP_STL := gnustl_static
APP_PLATFORM := android-9
您需要添加:

#define EGL_EGLEXT_PROTOTYPES
#include
行之前(特别是在include
EGL/eglext.h
之前)

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

编辑:或只是取消对Android.mk中的行的注释,该行内容如下:

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES

我认为你应该遵循这些步骤来获得更多的理解

在做球之前,请先做酸的

  • 直到jni Folder>的项目路径和直到ndk构建的ndk路径 ex D:\New\u Wok\u 2\Firstndk\jni>c:\android-ndk-r8\ndk build 清理你的项目

我补充道。这是新的错误。在/Users/geek/code/app/jni/app.h:20:0中包含的文件中,from/Users/geek/code/app/jni/app.cpp:17:/android-14/arch-arm/usr/include/jni.h:592:13:注意:GCC 4.4/Users/geek/code/app/jni/jni_egl_fence.cpp中“void Java_com_android_gallery3d_photoeditor_FilterStack_nativeesetgelfenceandwait”(JNIEnv*,jobject)中“va_列表”的混乱已发生变化“:/Users/geek/code/app/jni/app.cpp:31:72:错误:“eglCreateSyncKHR”未在此范围内声明这到底是什么意思?我对C++没有概念。“GCC 4.4中‘va_list’的混乱已经改变”,这看起来就像一个警告。错误是“'eglCreateSyncKHR'未在此范围内声明”。您需要包括#include#include,无论您在何处使用EGL函数。有关警告的详细信息,请参阅我的app.cpp,它们都包括在内
#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES