2012-08-23 16 views
7

Mi app.cpp:Compilar con NDK da error para los archivos de cabecera incluidos con éxito

#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; 
    } 
    ... 

Cuando corro NDK-construcción, no logra encontrar métodos presentes en egl.h y .so no se crea. Aquí está el registro:

app.cpp:31:72: error: 'eglCreateSyncKHR' was not declared in this scope 

seguido por todos los métodos KHR que pertenecen a

Aquí está 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) 

Respuesta

5

es necesario agregar:

#define EGL_EGLEXT_PROTOTYPES 

ante sus #include líneas (así, en concreto antes de incluir EGL/eglext.h).

También (y parece que ya lo está haciendo), necesita estar compilando al menos API 14, ya que es el primer nivel de API que expone esta función en la API pública.

EDITAR

: o simplemente elimine la línea en su Android.mk que dice:

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES 
2

Trate de seguir todos los pasos de:

http://en.wikibooks.org/wiki/OpenGL_Programming/Android_GLUT_Wrapper

Del registro que proporcionó, la compilación no puede encontrar la biblioteca EGL, por lo que Creo que necesita la línea

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2 

en su Android.mk. Y asegurarse de que su Application.mk incluye:

APP_STL := gnustl_static 
APP_PLATFORM := android-9 
+1

He añadido eso. Aquí está el nuevo error. En el archivo incluido en /Users/geek/code/app/jni/app.h:20:0, de /Users/geek/code/app/jni/app.cpp:17: /android-14/arch -arm/usr/include/jni.h: 592: 13: nota: el cambio de 'va_list' ha cambiado en GCC 4.4 /Users/geek/code/app/jni/jni_egl_fence.cpp: En la función 'void Java_com_android_gallery3d_photoeditor_FilterStack_nativeEglSetFenceAndWait (JNIEnv *, jobject) ': /Users/geek/code/app/jni/app.cpp:31:72: error:' eglCreateSyncKHR 'no se ha declarado en este ámbito – Taranfx

+1

¿Qué diablos significa esto? No tengo idea sobre C++. "el cambio de 'va_list' ha cambiado en GCC 4.4" – Taranfx

+1

app.h: 20 es #include Taranfx

1

creo que debería seguir los siguientes pasos para una mayor comprensión steps

y antes de hacer pls Bulid hacen agria

  • ruta del proyecto hasta el JNI folde> y la ruta hasta el NDK NDK-construir ex D: \ New_Wok_2 \ Firstndk \ JNI> c: \ android-NDK-r8 \ ndk-build y limpiar su proyecto
Cuestiones relacionadas