andengine compileReleaseNdk错误

我想在我的android studio项目中使用andengine,但是在构建时我有ndk错误。

Error:Execution failed for task ':andEngine:compileReleaseNdk'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:Androidandroid-ndk-r9dndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaseAndroid.mk APP_PLATFORM=android-19 NDK_OUT=D:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaseobj NDK_LIBS_OUT=D:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaselib 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:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaseobj/local/armeabi-v7a/objs/andengine_shared/D_Androidworkspacesimpleclocksimple_clock_asandEnginesrcmainjnisrcGLES20Fix.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:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaseobj/local/armeabi-v7a/objs/andengine_shared/D_Androidworkspacesimpleclocksimple_clock_asandEnginesrcmainjnisrcGLES20Fix.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:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaseobj/local/armeabi-v7a/libandengine_shared.so] Error 1

我想我错过了一些OpenGL文件?


Android Gradle插件的NDK任务实际上并未使用您可能在jni /文件夹中提供的任何Android.mk文件。 直到我明白为止,这对我来说是一个很大的混乱。

它会在构建过程中根据您在Gradle构建脚本中设置的参数以及jni /文件夹的内容生成中间的Android.mk文件。

你可以在https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android查看NdkCompile任务的源代码/build/gradle/tasks/NdkCompile.groovy。

请注意第126行的writeMakeFile(...)方法。

这就是为什么从作为Gradle构建一部分运行的ndk-build命令获得的错误引用构建脚本APP_BUILD_SCRIPT=D:Androidworkspacesimpleclocksimple_clock_asandEnginebuildintermediatesndkreleaseAndroid.mk ,而不是像你可能期望的那样,不像APP_BUILD_SCRIPT=D:Androidworkspacesimpleclocksimple_clock_asandEnginesrcmainjniAndroid.mk

没有办法让Android Gradle插件的NDK任务使用您自己的Android.mk文件(相信我,如果有的话我会找到它!)。

你有两个选择让你的NDK代码编译成Gradle的一部分:

  • 找出要放入build.gradle的正确配置,以便生成的Android.mk文件包含所需的LOCAL_LDLIBS := -lGLESv2行和https://github.com/nicolasgramlich/AndEngine/blob/中的任何其他行GLES2 / jni / Android.mk是必需的。
  • 编写一个直接使用AndEnginge的Android.mk文件的自定义NDK编译任务。 我最近不得不自己做一个NDK源代码集,它需要比Android Gradle插件目前支持通过Gradle传递更多的参数,所以如果出现这种情况,我可以提供帮助。
  • 我认为在这种情况下,选项1是开放的,所以当然是更好的解决方案。

    像这样的东西添加到android defaultConfig块应该工作:

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

    不幸的是,我非常不是C / native代码专家(我几乎不知道什么),所以无法猜测AndEngine是否需要将LOCAL_MODULE_FILENAMELOCAL_EXPORT_C_INCLUDES设置为正确构建。 如果确实如此,则需要采用方法2(至少在Android Gradle NDK任务支持配置它们的情况下)。 虽然我刚刚检查了AndEngine git repo,并在将它们从Android.mk文件中移除后成功运行了ndk-build ,这很有希望。

    (我发现哪些NDK属性可以通过https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/ gradle这个/内部/ DSL / NdkConfigDsl.java)。


    我有类似的问题,这个视频https://www.youtube.com/watch?v=0-rYK2oh8oo帮助我解决构建问题。 基本上,您需要从这里下载(并提取)NDK:http://developer.android.com/ndk/downloads/index.html并在模块设置中指定NDK位置。 此外,您需要更改andEngine的build.gradle文件以包含该文件

        sourceSets{
            main{
                jni.srcDirs = []
            }
        }
    

    Android.mk实际上包含该行?

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

    LOCAL_LDLIBS := -lGLESv2
    

    这些错误表明它。

    error: undefined reference to 'glVertexAttribPointer'
    error: undefined reference to 'glDrawElements'
    
    链接地址: http://www.djcxy.com/p/80315.html

    上一篇: andengine compileReleaseNdk error

    下一篇: Undefined function 'distcomp.fileserializer'