下面详细介绍一下用NDK r9版本编译cocos2d x 2.0.4可能会遇到的各个坑吧。
错误提示1:
Android NDK: WARNING:E:\cocos2d-x\cocos2d-2.0-x-2.0.4/cocos2dx/Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
"Compile++ thumb : cocosdenshion_static <= SimpleAudioEngine.cpp
E:\cocos2d-x\cocos2d-2.0-x-2.0.4/CocosDenshion/android/SimpleAudioEngine.cpp: In constructor 'CocosDenshion::SimpleAudioEngine::SimpleAudioEngine()':
E:\cocos2d-x\cocos2d-2.0-x-2.0.4/CocosDenshion/android/SimpleAudioEngine.cpp:159:2: error: format not a string literal and no format arguments [-Werror=format-security]
cc1plus.exe: some warnings being treated as errors
make: *** [obj/local/armeabi/objs-debug/cocosdenshion_static/SimpleAudioEngine.o] Error 1
解决方法:把SimpleAudioEngine.cpp第159行注释掉
在文件夹CocosDenshion/android中找到SimpleAudioEngine.cpp文件,定位到第159行,将其注释掉如下:
//LOGD(deviceModel);
再次用Cygwin Terminal软件运行build_native.sh,又出现新的提示错误。
错误提示2:
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/OpenSLEngine.cpp:292:45: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/OpenSLEngine.cpp:292:45: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/OpenSLEngine.cpp: In member function 'void OpenSLEngine::create Engine(void*)':
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/OpenSLEngine.cpp:324:3: error: format not a string literal and no format arguments [-Werror=format-security]
cc1plus.exe: some warnings being treated as errors
/cygdrive/e/android-ndk-r9c/build/core/build-binary.mk:388: recipe for target 'obj/local/armeabi/objs-debug/cocosdenshion_static/opensl/OpenSLEngine.o' failed
make: *** [obj/local/armeabi/objs-debug/cocosdenshion_static/opensl/OpenSLEngine.o] Error 1
make: Leaving directory '/cygdrive/e/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android'
错误提示解读:warning我们就不管了,先只看error,OpenSLEngine.cpp文件324行error。
解决方法:把cocos2d-2.0-x-2.0.4\CocosDenshion\android\opensl文件夹下的OpenSLEngine.cpp文件
324行注释掉 /*LOGD(errorInfo);*/
再次运行build_native.sh,又提示错误。
错误提示3:
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/OpenSLEngine.cpp:292:45: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/OpenSLEngine.cpp:292:45: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
[armeabi] Compile++ thumb: cocosdenshion_static <= SimpleAudioEngineOpenSL.cpp
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/SimpleAudioEngineOpenSL.cpp: In member function 'bool SimpleAudioEngineOpenSL::initEngine()':
E:/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android/../../CocosDenshion/android/opensl/SimpleAudioEngineOpenSL.cpp:41:5: error: format not a string literal and no format arguments [-Werror=format-security]
cc1plus.exe: some warnings being treated as errors
/cygdrive/e/android-ndk-r9c/build/core/build-binary.mk:388: recipe for target 'obj/local/armeabi/objs-debug/cocosdens hion_static/opensl/SimpleAudioEngineOpenSL.o' failed
make: *** [obj/local/armeabi/objs-debug/cocosdenshion_static/opensl/SimpleAudioEngineOpenSL.o] Error 1
make: Leaving directory '/cygdrive/e/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android'
这次轮到SimpleAudioEngineOpenSL.cpp文件第41行。
解决方法:把cocos2d-2.0-x-2.0.4\CocosDenshion\android\opensl文件夹下的SimpleAudioEngineOpenSL.cpp文件第41行注释掉:
/* LOGD(errorInfo);*/
再次运行build_native.sh。又提示错误,warning我们就不管了,先只看error。
错误提示4:
/cygdrive/e/android-ndk-r9c/build/core/build-binary.mk:388: recipe for target 'obj/local/armeabi/objs-debug/cocos2d x_static/platform/android/CCCommon.o' failed
make: *** [obj/local/armeabi/objs-debug/cocos2dx_static/platform/android/CCCommon.o] Error 1
make: Leaving directory '/cygdrive/e/cocos2d-2.0-x-2.0.4/cocos2d-2.0-x-2.0.4/testa/proj.android'
解决方法:这次我们在Application.mk文件后面添加下面代码:
APP_CPPFLAGS += -Wno-error=format-security
再次运行build_native.sh,然后一切就顺利了!我把so文件(libgame.so)在eclipse里面导入android项目,并编译成apk文件,测试成功。
至此,NDK r9版本就可以用build_native.sh编译成so文件(libgame.so),
已经在真机上测试cocos2d x的hello World成功。
如果再有其他报错应该不是NDK r9本身的原因,建议考虑NDK_ROOT是否设置,或者权限的问题,
或者是项目的代码问题(有一些VC++允许通过的,这里会有细微的差异)。
如果第一次尝试做交叉编译的同学,建议不要用自己写的Classes代码编译,
可以考虑用官方的HelloWorld,这样可以减少困扰。
相关推荐
Android Cocos2d-x 环境配置 1.开发环境 2.安装步骤 2.1.安装JDK 2.2.安装android sdk 2.3.安装NDK 2.4.项目转换 2.5.Eclipse导入生成的Hello World Android项目 ...3.Cocos2d-x下使用iconv库实现中文
用ndk r9编译的ffmpeg2.2.4库,可以在android中通过jni方法调用, 头文件请自己到官网下载源代码
ndk-stack调试.so库
NDK+COCOS2D-X的开发,大家可以下载看看,相当不错的东西,可以快速的开发跨平台的游戏
文档详细地描述了cocos2d-x在window7中,在eclipse中的配置问题,这样的配置只需要在eclipse中编码即可,不需要vs等其他的编辑器,java C++都在一个编辑器中完成,还有高亮和提示,快下来参考参考吧。
配置cocos2d-x环境工程的配置,adt,ndk,以及python。
注1:0.13版本的cocosw2d-x 搭配 Eclipse 也可以使用这个批处理,不要使用NDK自带的ndk-build.cmd 注2:此批处理可以脱离Eclipse,只用NDK自带的编译器即可,这里只用来编译库,如果要打包到APK还是需要Eclipse的...
使用ndk编译box2d物理引擎,并将它移植到android上,测试代码为Box2D自带的Example helloworld.
cocos2d-x_Win32_Android_环境配置手册,如何安装和使用ndk环境
Using Android NDK r9b builds boost 1.53.0, including the build script. Usage: ./build-android.sh $NDK_ROOT
cocos2d-x eclipse linux android cocos2d-x移植到android平台的详细步骤
在ubuntu 64位下使用android-ndk-r9d 编译最新版本ffmpeg2.2 所生成的8个so库:libavcodec.so libavdevice.so libavfilter.so libavformat.so libavutil.so libswresample.so libswscale.so libpostproc.so 以及对应...
cocos2d-x第三方库 该存储库包含与cocos2d-x捆绑在一起的第三方库(二进制)的源代码。 对于cocos2d-x开发人员和/或想要: 生成特定库的更新版本(例如:将libpng 1.6.2升级到1.6.14) 将cocos2d-x移植到其他平台...
cocos2d-x 游戏类 通过PayPal支持更新第三库: $ 10,$ 50,$ 100等。 经过测试 带有ndk-r10d的cocos命令3.8.1 cocos run -p android --android-studio --app-abi armeabi-v7a:arm64-v8a cocos run -p android --...
ffmpeg4.16 ndk21 android 21 版本编译的库,包含 arm-v7a、arm-v8,包含include、动态链接库.so文件。
android ndk r9d linux 64bit 一共七部份,第六部份
android ndk r9d linux 64bit 一共七部份
老版本的ndk,版本号是android-ndk-r9-windows-x86_64
本资源内包含给 Cocos2d-x 的安卓工程批量打包的脚本。具体可以查看我的博客。里面的多个脚本针对开发到发布的 debug , release , release to channels 都有实现。