2014-07-03 25 views
7

Android stüdyo projemde andengine kullanmak istiyorum ancak bina çalışırken ndk hatası var.andengine compileReleaseNdk hatası

Error:Execution failed for task ':andEngine:compileReleaseNdk'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
    D:\Android\android-ndk-r9d\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\Android.mk APP_PLATFORM=android-19 NDK_OUT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj NDK_LIBS_OUT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\lib APP_ABI=all 
Error Code: 
    2 
Output: 
    D:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj/local/armeabi-v7a/objs/andengine_shared/D_\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\src\GLES20Fix.o: in function Java_org_andengine_opengl_GLES20Fix_glVertexAttribPointer:GLES20Fix.c(.text.Java_org_andengine_opengl_GLES20Fix_glVertexAttribPointer+0x40): error: undefined reference to 'glVertexAttribPointer' 
    D:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj/local/armeabi-v7a/objs/andengine_shared/D_\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\src\GLES20Fix.o: in function Java_org_andengine_opengl_GLES20Fix_glDrawElements:GLES20Fix.c(.text.Java_org_andengine_opengl_GLES20Fix_glDrawElements+0x30): error: undefined reference to 'glDrawElements' 
    collect2: ld returned 1 exit status 
    make.exe: *** [D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj/local/armeabi-v7a/libandengine_shared.so] Error 1 

Bazı OpenGL dosyalarını kaçırdığım var mı?

cevap

0

Android.mk aslında satırı içerir?

https://github.com/nicolasgramlich/AndEngine/blob/GLES2/jni/Android.mk#L10

LOCAL_LDLIBS := -lGLESv2 

Bu hatalar onu gösteriyor.

error: undefined reference to 'glVertexAttribPointer' 
error: undefined reference to 'glDrawElements' 
+0

İçindekiler'i değiştirmek için theEngine's'in build.gradle dosyasını değiştirmeniz gerekir. Yanıtınız için teşekkür ederiz! Bunu kontrol ettim ve 'Android.mk'nın zaten bu satırı içerdiğini buldum – rocknow

3

Android Gradle eklentinin NDK görev aslında size jni/klasöründe sağlanan olabileceğiniz Android.mk dosyasını kullanmaz. Bunu anlayana kadar, bu benim için büyük bir karışıklık kaynağıydı.

Yapı sırasında, Gradle derleme komut dosyanızda ve jni/klasörünüzün içeriğinde ayarladığınız parametrelere dayanarak bir ara Android.mk dosyası oluşturur.

NdkCompile görevinin kaynağını https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/gradle/tasks/NdkCompile.groovy adresinden denetleyerek bunu kendiniz görebilirsiniz.

Not hattında writeMakeFile(...) yöntem 126.

Bu yüzden sizin Gradle inşa referanslar script kurmak APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\Android.mk parçası olarak senin kadar APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\Android.mk gibi değil bir şey çalışır Eğer ndk-build komutundan alıyorsanız hata bekleyebilir ve isteyebilir.

Kendi Android.mk dosyanızı kullanmak için Android Gradle eklentisinin NDK görevini almanın bir yolu yoktur (bulsaydım, bulsaydım bana inan!). oluşturulan Android.mk dosyası gereklidir LOCAL_LDLIBS := -lGLESv2 satır barındıracak şekilde build.gradle koymak için doğru yapılandırma dışarı

  1. Şekil:

    Sen Gradle parçası olarak derleme sizin NDK Kodu almak için iki seçenek var ve diğer satırlardan https://github.com/nicolasgramlich/AndEngine/blob/GLES2/jni/Android.mk gerekli.

  2. Doğrudan AndEnginge's Android.mk dosyasını kullanan özel bir NDK derleme görevi yazın. Son zamanlarda, Gradle üzerinden geçmekte olan Android Gradle eklentisinden daha fazla parametre gerektiren bir NDK kaynak seti için bunu kendim yapmak zorunda kaldım, bu yüzden eğer yardım edebilirse, bunu sağlayabilirim.

Bu durumda seçenek 1'in açık olduğunu ve tabii ki tercih edilen çözüm olduğunu düşünüyorum. Böyle

şey çalışmalıdır android defaultConfig bloğuna eklendi:

Maalesef
android { 
    defaultConfig { 
     ndk { 
      moduleName "myNDKModule" 
      stl "stlport_shared" 
      ldLibs "lGLESv2" 
      cFlags "-Werror" 
     } 
    } 
} 

ben çok duyuyorum değil C/yerel kod uzmanı (Ben bir bilgimiz yok) bu yüzden AndEngine LOCAL_MODULE_FILENAME ihtiyacı olup olmadığını tahmin edemez ve doğru şekilde oluşturulacak LOCAL_EXPORT_C_INCLUDES. varsa, yaklaşım 2 ile gitmeniz gerekir (en azından Android Gradle NDK görevi bunları yapılandırmayı destekliyorsa/bulana kadar).Ben sadece AndEngine git repo'yu kontrol ettim ve başarılı bir şekilde Android.mk dosyasından çıkardıktan sonra ndk-build'u başarıyla çalıştırdım.

(Hangi NDK özelliklerinin https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java denetimi aracılığıyla parametrelenebileceğini buldum).

+0

Cevabınız için teşekkürler! Ne yazık ki, yeni hatalar var .. Eğer yardımcı olabilirseniz, lütfen günlüğe bakın: http://pastebin.com/4xUWP93D – rocknow

+2

"ldLibs" lGLESv2 "' ldLibs "GLESv2" 'olmalıdır – ph0b