Compiling and linking error when using NDK r10 to build cocos2d-x v3.2

前端之家收集整理的这篇文章主要介绍了Compiling and linking error when using NDK r10 to build cocos2d-x v3.2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自:http://www.cocos2d-x.org/news/307

ByzhangxmPosted8 months agoComments 20

NDK r10 has problem,refer to [this ticket](https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=73907). We suggest you not use it.

If you use NDK r10 to build cocos2d-x v3.2,you will meet a compiling error of all tests and linking error of lua tests.

compiling error

The error message is

/Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.cpp:94:23: error: 
      return type of out-of-line definition of 'cocos2d::BundleReader::tell'
      differs from that in the declaration
ssize_t BundleReader::tell()
                      ^
/Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.h:90:14: note: 
      prevIoUs declaration is here
    long int tell();

This compiling error is fixed inthis patch. We are sorry about it.

linking error

After fixing the compiling error,you will meet linking error when building lua test cases or new lua projects

/Users/minggo/bin/android/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: /Users/minggo/bin/android/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/libgcc.a(pr-support.o): multiple definition of '_Unwind_GetRegionStart'
/Users/minggo/bin/android/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: /Users/minggo/bin/android/android-ndk-r10/sources/cxx-stl/llvm-libc++/libs/armeabi/thumb/libc++_static.a(Unwind-EHABI.o): previous definition here
/Users/minggo/bin/android/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: /Users/minggo/bin/android/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/libgcc.a(pr-support.o): multiple definition of '_Unwind_GetLanguageSpecificData'
/Users/minggo/bin/android/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: /Users/minggo/bin/android/android-ndk-r10/sources/cxx-stl/llvm-libc++/libs/armeabi/thumb/libc++_static.a(Unwind-EHABI.o): previous definition here
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

I have createda ticketin Android issue system for it. And NDK developers confirmed it is a bug of NDK r10. And he gave two ways to work around it:

  • requires makefile changes to drop libgcc.a with command line reads "-nodefaultlibs -lstdc++ -latomic -ldl -lm -lc -lcompiler_rt_static"

    Because we don't use standalone toolchain,so changing makefile doesn't work for cocos2d-x.

  • use libc++_shared.so and addLIBCXX_USE_GABIXX:=truein Application.mk which force rebuild libc++ to use gabi++

    This method requires to use shared library and modifyCocos2dxActivity.javato load dependened shared library. We don't want to modify like this,because:

    • We haven't used shared library before which means we haven't tested
    • It will make .apk 0.13M bigger then using static library
    • Google guy will fix it in next NDK version
conclusion

We suggest you not to use NDK r10. Please use NDK r9d instead.If you want to use NDK r10,the following steps can help you work around it:

NDK r9d url

猜你在找的Cocos2d-x相关文章