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的一部分:
LOCAL_LDLIBS := -lGLESv2
行和https://github.com/nicolasgramlich/AndEngine/blob/中的任何其他行GLES2 / jni / Android.mk是必需的。 我认为在这种情况下,选项1是开放的,所以当然是更好的解决方案。
像这样的东西添加到android defaultConfig块应该工作:
android {
defaultConfig {
ndk {
moduleName "myNDKModule"
stl "stlport_shared"
ldLibs "lGLESv2"
cFlags "-Werror"
}
}
}
不幸的是,我非常不是C / native代码专家(我几乎不知道什么),所以无法猜测AndEngine是否需要将LOCAL_MODULE_FILENAME
和LOCAL_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