报告个android编译问题

编译环境:eclipse,ndk r10d, Cocos引擎 V1.0 Preview版本

问题描述:用ndk r10d编译出错,但是如果换成ndk r9d又能正常通过编译。可能有人会说用ndk r9d可以行了,但是3.3不是都说最好用r10c以上了吗?

另外我试过,用Cocos引擎 V1.0 Preview版本新创建出来的工程是能够用ndk r10d编译通过的,也就是说我用了某些2dx里面较少人用到的东西才会导致编译不过,但我也不知道具体是哪里的问题。所以只好来这反应了

下面是ndk r10d编译出错的错误信息
SharedLibrary : libcocos2dcpp.so
/Users/tao/develop/android/android-ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/…/…/…/…/arm-linux-androideabi/bin/ld: error: /Applications/Cocos/frameworks/cocos2d-x/external/curl/prebuilt/android/armeabi/libcurl.a(sha512-armv4.o): requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC
/Applications/Cocos/frameworks/cocos2d-x/external/curl/prebuilt/android/armeabi/libcurl.a(url.o):function IsPipeliningPossible: error: relocation overflow in R_ARM_THM_CALL
/Applications/Cocos/frameworks/cocos2d-x/external/curl/prebuilt/android/armeabi/libcurl.a(url.o):function fix_hostname.isra.1: error: relocation overflow in R_ARM_THM_CALL
jni/…/…/Classes/mysocial/EziFacebookUserBase.cpp:227: error: undefined reference to ‘cocos2d::Data::fastSet(unsigned char*, int)’
jni/…/…/Classes/mysocial/EziFacebookUserBase.cpp:233: error: undefined reference to ‘cocos2d::Image::initWithImageData(unsigned char const*, int)’
jni/…/…/Classes/mysocial/EziFacebookUserBase.cpp:197: error: undefined reference to ‘cocos2d::Image::initWithImageData(unsigned char const*, int)’
jni/…/…/Classes/mysocial/EziFacebookUserBase.cpp:203: error: undefined reference to ‘cocos2d::Data::fastSet(unsigned char*, int)’
./obj/local/armeabi/objs/cocos2dcpp_shared///Classes/writenumber/WriteNumberTile.o:jni/…/…/Classes/writenumber/WriteNumberTile.cpp:vtable for WriteNumberTile: error: undefined reference to 'cocos2d::Sprite::setDisplayFrameWithAnimationName(std::__1::basic_string<char, std::1::char_traits, std::1::allocator > const&, int)’
./obj/local/armeabi/objs/cocos2dcpp_shared/
/
/Classes/trueorfalse/TrueOrFalseTile.o:jni/…/…/Classes/trueorfalse/TrueOrFalseTile.cpp:vtable for TrueOrFalseTile: error: undefined reference to 'cocos2d::Sprite::setDisplayFrameWithAnimationName(std::__1::basic_string<char, std::1::char_traits, std::1::allocator > const&, int)’
./obj/local/armeabi/objs/cocos2dcpp_shared/
/
/Classes/simplicity/SimplicityTile.o:jni/…/…/Classes/simplicity/SimplicityTile.cpp:vtable for SimplicityTile: error: undefined reference to ‘cocos2d::Sprite::setDisplayFrameWithAnimationName(std::__1::basic_string<char, std::1::char_traits, std::1::allocator > const&, int)’
./obj/local/armeabi/objs/cocos2dcpp_shared/
/
/Classes/operations/OperationsTile.o:jni/…/…/Classes/operations/OperationsTile.cpp:vtable for OperationsTile: error: undefined reference to ‘cocos2d::Sprite::setDisplayFrameWithAnimationName(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, int)’
make: Leaving directory `/Users/tao/develop/cocos3-projects/AllAboutNumber/proj.android’
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
The Selected NDK toolchain version was 4.8 !
make: *** Error 1
Traceback (most recent call last):
File “/Users/tao/develop/cocos3-projects/AllAboutNumber/proj.android/build_native.py”, line 159, in
build(opts.ndk_build_param,opts.android_platform,opts.build_mode)
File “/Users/tao/develop/cocos3-projects/AllAboutNumber/proj.android/build_native.py”, line 146, in build
do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode)
File “/Users/tao/develop/cocos3-projects/AllAboutNumber/proj.android/build_native.py”, line 82, in do_build
raise Exception(“Build dynamic library for project " + app_android_root + " ] fails!”)
Exception: Build dynamic library for project /Users/tao/develop/cocos3-projects/AllAboutNumber/proj.android ] fails!

3.3rc2以后才建议r10c,之前都是建议使用r9d。

具体的原因看这个贴子的讨论:http://discuss.cocos2d-x.org/t/build-android-base-on-ndk-r10c/18543

为什么cocos 引擎 v1.0 preview不支持?

因为出cocos 引擎 v1.0 preview,Cocos2d-x的版本是rc0,所以内置的也是rc0。

原来如此,那我提个建议吧,每次发布版本都写一下环境要求,从3.0到现在3.3rc2光ndk要求就变了好几遍,都有点晕了,也没地方可以查看

好的,其实在官方仓库的README就有写明编译环境,使用什么版本的NDK。

https://github.com/cocos2d/cocos2d-x

我不是要挑刺啊,只是希望大家用的都容易。
特意去看了readme,上面是这么写的:
Build Requirements

Mac OS X 10.7+, Xcode 5.1+
or Ubuntu 12.10+, CMake 2.6+
or Windows 7+, VS 2012+
Python 2.7.5
NDK r9d is required to build Android games
Windows Phone/Store 8.0 VS 2012+
Windows Phone/Store 8.1 VS 2013 Update 3+

可以看到,3.3版要求还是ndk r9d,但是发布公告上的却是这样写的:
We suggest you use NDK r10c or upper version, because it fixed some bugs that exist on Android 5.0.

可能是你们忘记更新readme了吧。

:12::12::12:确实造成了混淆。

我让他们改下~!!!

已更正!感谢反馈!~

我想问下 cocos2d-x 2.2怎么适配Android 5?

http://www.cocos2d-x.org/download/version 这个链接上下的v3.3 还是报错。我用的的是ndk-r10c.

错误描述:
jni/…/…/cocos2d/external/curl/prebuilt/android/armeabi/libcurl.a(sha512-armv4.o): requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC

我把项目重新一步一步编译了下又好了。报错是我哪里设置有问题。