7

私の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;
  }
  ...

ndk-buildを実行すると、egl.hに存在するメソッドの検索に失敗し、.soが作成されません。ログは次のとおりです。

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

に属するすべての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)
4

3 に答える 3

5

追加する必要があります:

#define EGL_EGLEXT_PROTOTYPES

あなたの#include行の前に(まあ、特に含める前にEGL/eglext.h)。

また(すでにこれを行っているようです)、少なくともAPI 14に対して構築する必要があります。これは、パブリックAPIでこの関数を公開する最初のAPIレベルだからです。

編集:または、Android.mkの次の行のコメントを解除します。

#LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES
于 2012-08-29T09:46:02.730 に答える
2

次のすべての手順に従ってください。

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

提供したログから、ビルドはEGLライブラリを見つけることができないため、次の行が必要だと思います

LOCAL_LDLIBS    := -llog -landroid -lEGL -lGLESv2

Android.mkで。また、Application.mkに次のものが含まれていることを確認してください。

APP_STL := gnustl_static
APP_PLATFORM := android-9
于 2012-08-23T12:38:58.650 に答える
0

手順をより深く理解するには、この手順に従う必要があると思います

そして、bulidplsを作る前に酸っぱくする

  • プロジェクトパスuntillljnifolde>およびndkパスuntillndk-buildex D:\ New_Wok_2 \ Firstndk \ jni> c:\ android-ndk-r8\ndk-プロジェクトをビルドしてクリーンアップします
于 2012-08-31T06:56:44.217 に答える