我想在我的android studio项目中使用andengine,但在构建时出现了ndk错误。
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文件?
发布于 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是开放的,所以当然是更好的解决方案。
像这样添加到android defaultConfig块中的东西应该可以工作:
android {
defaultConfig {
ndk {
moduleName "myNDKModule"
stl "stlport_shared"
ldLibs "lGLESv2"
cFlags "-Werror"
}
}
}不幸的是,我不是一个C/原生代码专家(我几乎一无所知),所以不能猜测AndEngine是否需要设置LOCAL_MODULE_FILENAME和LOCAL_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来参数化)。
发布于 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文件以包含
sourceSets{
main{
jni.srcDirs = []
}
}发布于 2014-07-10 12:38:12
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'https://stackoverflow.com/questions/24563243
复制相似问题