2012-08-23 49 views
7

My app.cpp:Biên soạn với NDK cho lỗi cho các tập tin tiêu đề bao gồm thành công

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

Khi tôi chạy ndk-build, nó thất bại tìm kiếm các phương pháp hiện diện trong egl.h và .so không được tạo ra. Dưới đây là các bản ghi:

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

Tiếp theo tất cả các phương pháp KHR thuộc về

Dưới đây là 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) 

Trả lời

5

Bạn cần phải thêm:

#define EGL_EGLEXT_PROTOTYPES 

trước #include dòng của bạn (tốt, đặc biệt là trước khi đưa EGL/eglext.h).

Ngoài ra (và có vẻ như bạn đã làm điều này), bạn cần phải xây dựng dựa trên ít nhất API 14, vì đó là cấp API đầu tiên hiển thị chức năng này trong API công khai.

EDIT: hoặc chỉ bỏ ghi chú dòng trong Android.mk của bạn mà đọc:

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES 
2

Hãy thử làm theo tất cả các bước trong:

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

Từ nhật ký mà bạn đã cung cấp, bản dựng không thể tìm thấy thư viện EGL, vì vậy Tôi nghĩ bạn cần dòng

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2 

trong Android.mk của bạn. Và chắc chắn rằng Application.mk của bạn bao gồm:

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

Tôi đã thêm điều đó. Đây là lỗi mới. Trong tệp bao gồm từ /Users/geek/code/app/jni/app.h:20:0, từ /Users/geek/code/app/jni/app.cpp:17: /android-14/arch -arm/usr/include/jni.h: 592: 13: lưu ý: xoài của 'va_list' đã thay đổi trong GCC 4.4 /Users/geek/code/app/jni/jni_egl_fence.cpp: Trong hàm 'void Java_com_android_gallery3d_photoeditor_FilterStack_nativeEglSetFenceAndWait (JNIEnv *, jobject) ': /Users/geek/code/app/jni/app.cpp:31:72: lỗi:' eglCreateSyncKHR 'không được khai báo trong phạm vi này – Taranfx

+1

Điều này có nghĩa là gì? Tôi không có ý tưởng về c + +. "mangling của 'va_list' đã thay đổi trong GCC 4.4" – Taranfx

+1

app.h: 20 là #include Taranfx

1

tôi nghĩ rằng bạn nên làm theo các bước này để hiểu hơn steps

và trước khi làm pls bulid làm chua

  • đường dẫn dự án cho đến khi jni folde> và đường dẫn ndk untill ndk-build ví dụ: D: \ New_Wok_2 \ Firstndk \ jni> c: \ android-ndk-r8 \ ndk-build và dọn dẹp dự án của bạn
Các vấn đề liên quan