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: returntypeofout-of-linedeFinitionof'cocos2d::BundleReader::tell' differsfromthatinthedeclaration ssize_tBundleReader::tell() ^ /Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.h:90:14:note: prevIoUsdeclarationishere longinttell();
This compiling error is fixed in this 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):multipledeFinitionof'_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):prevIoUsdeFinitionhere /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):multipledeFinitionof'_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):prevIoUsdeFinitionhere clang++:error:linkercommandFailedwithexitcode1(use-vtoseeinvocation)
I have created a ticket in 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 add
LIBCXX_USE_GABIXX:=true
in Application.mk which force rebuild libc++ to use gabi++This method requires to use shared library and modify
Cocos2dxActivity.java
to 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:
Change
long int
tossize_t
in the declaration ofBundleReader::tell()
. You can refer to this pull request for detail @R_860_4045@ion.Change
APP_STL:=c++_static
toAPP_STL:=c++_shared
,addLIBCXX_USE_GABIXX:=true
inApplication.mk
,and modify your java activity code to loadlibc++_shared.so
. You can refer to this commit for more detail @R_860_4045@ion
NDK r9d url
linux: http://dl.google.com/android/ndk/android-ndk-r9-linux-x86.tar.bz2
windows: http://dl.google.com/android/ndk/android-ndk-r9d-windows-x86_64.zip
mac os x: https://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2
本文转自http://www.cocos2d-x.org/news/307
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。