2012-08-23 8 views
7

mio app.cpp:La compilazione con NDK dà errore per i file di intestazione inclusi successo

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

Quando eseguo NDK-build, non riesce a trovare i metodi presenti in egl.h e .so non viene creato. Ecco il log:

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

seguito da tutti i metodi KHR che appartengono a

Ecco 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) 

risposta

5

è necessario aggiungere:

#define EGL_EGLEXT_PROTOTYPES 

davanti ai vostri #include linee (beh, in particolare prima di includere EGL/eglext.h).

Inoltre (e sembra che lo stiate già facendo), è necessario creare almeno API 14, poiché questo è il primo livello API che espone questa funzione nell'API pubblica.

EDIT: o semplicemente il commento dalla riga nel vostro Android.mk che legge:

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES 
2

Prova a seguire tutti i passaggi in:

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

Dal log che hai fornito, la build non riesce a trovare la libreria EGL, quindi Penso che tu abbia bisogno della linea

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2 

nel tuo Android.mk. E assicurarsi che l'Application.mk comprende:

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

Ho aggiunto quello. Ecco il nuovo errore. Nel file incluso da /Users/geek/code/app/jni/app.h:20:0, da /Users/geek/code/app/jni/app.cpp:17: /android-14/arch -arm/usr/include/jni.h: 592: 13: nota: il mangling di 'va_list' è cambiato in GCC 4.4 /Users/geek/code/app/jni/jni_egl_fence.cpp: nella funzione 'void Java_com_android_gallery3d_photoeditor_FilterStack_nativeEglSetFenceAndWait (JNIEnv *, jobject) ': /Users/geek/code/app/jni/app.cpp:31:72: errore:' eglCreateSyncKHR 'non è stato dichiarato in questo ambito – Taranfx

+1

Che diavolo significa? Non ho idea di C++. "il mutamento di 'va_list' è cambiato in GCC 4.4" – Taranfx

+1

app.h: 20 è #include Taranfx

1

penso che si dovrebbe seguire questa procedura per una maggiore comprensione steps

e prima di fare pls Bulid rendono acida

  • percorso del progetto fino JNI folde> e il percorso NDK fino NDK-costruire ex D: \ New_Wok_2 \ Firstndk \ jni> c: \ android-NDK-r8 \ ndk-build e pulisci il tuo progetto
Problemi correlati