首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >andengine compileReleaseNdk错误

andengine compileReleaseNdk错误
EN

Stack Overflow用户
提问于 2014-07-04 05:01:34
回答 3查看 3.8K关注 0票数 7

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

代码语言:javascript
复制
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

我想我遗漏了一些OpenGL文件?

EN

回答 3

Stack Overflow用户

发布于 2014-07-13 19:21:28

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/build/gradle/tasks/NdkCompile.groovy上查看其NdkCompile任务的源代码,亲眼看到这一点。

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

这就是为什么在Gradle构建中运行的ndk-build命令会引用构建脚本APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\Android.mk,而不是像您期望的那样引用APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\Android.mk的错误。

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

将NDK代码编译为Gradle的一部分有两种选择:

  1. 找出要放入build.gradle中的正确配置,以便生成的Android.mk文件包含所需的NDK行和来自https://github.com/nicolasgramlich/AndEngine/blob/GLES2/jni/Android.mk的任何其他行,这些行是直接使用AndEnginge的Android.mk文件的自定义NDK编译任务。我最近不得不自己为一个NDK源码集做这件事,它需要比Android Gradle插件目前支持通过Gradle传递的参数更多的参数,所以到了这一步我可以提供帮助。

我认为在这种情况下,选项1是开放的,所以当然是更好的解决方案。

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

代码语言:javascript
复制
android {
    defaultConfig {
        ndk {
            moduleName "myNDKModule"
            stl "stlport_shared"
            ldLibs "lGLESv2"
            cFlags "-Werror"
        }
    }
}

不幸的是,我不是一个C/原生代码专家(我几乎一无所知),所以不能猜测AndEngine是否需要设置LOCAL_MODULE_FILENAMELOCAL_EXPORT_C_INCLUDES才能正确构建。如果是这样,您将需要使用方法2(至少在Android Gradle NDK任务支持配置它们之前是这样的)。虽然我刚刚签出了AndEngine git代码库,并在从Android.mk文件中删除它们之后成功地运行了ndk-build,这是很有希望的。

(我发现哪些NDK属性可以通过检查https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java来参数化)。

票数 3
EN

Stack Overflow用户

发布于 2016-05-13 21:21:46

我也遇到过类似的问题,这段视频https://www.youtube.com/watch?v=0-rYK2oh8oo帮助我解决了构建问题。基本上,您需要从以下位置下载(并解压缩) NDK:http://developer.android.com/ndk/downloads/index.html,并在Module Settings中指定NDK位置。此外,还需要修改andEngine的build.gradle文件以包含

代码语言:javascript
复制
    sourceSets{
        main{
            jni.srcDirs = []
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2014-07-10 12:38:12

Android.mk真的包括这行吗?

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

代码语言:javascript
复制
LOCAL_LDLIBS := -lGLESv2

这些错误表明了这一点。

代码语言:javascript
复制
error: undefined reference to 'glVertexAttribPointer'
error: undefined reference to 'glDrawElements'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24563243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档