I am porting an iOS Cocos2D-X game to Android and am having a terrible time getting STL to behave properly.
Initially, I was compiling with what I believe for some reason is the default Cocos2D-X project setting of
APP_STL := gnustl_static
This caused a lot of errors related to ‘to_string’ is not a member of ‘std’. This is pretty well documented and known and was not really surprising after reading about it. I then proceeded to try both
APP_STL := c++_static
and
APP_STL := c++_shared
Both of these gave me a large amount of STL errors when compiling. Here is a sample of the errors which are representative off all of them:
In file included from /Users/davidholtkamp/Development/igun-pro-2-client-cpp/cocos2d/cocos/./base/CCConsole.h:44:0,
from /Users/davidholtkamp/Development/igun-pro-2-client-cpp/cocos2d/cocos/./base/CCConsole.cpp:25:
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/map: In instantiation of ‘union std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>’:
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2088:55: required by substitution of ‘template<class _Tp, class _Arg> typename std::__ndk1::__select_2nd<decltype ((declval<_Tp>)()=(declval<_Arg>)()), std::__ndk1::integral_constant<bool, true> >::type std::__ndk1::__is_assignable_test(int) [with _Tp = std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&; _Arg = std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&]’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2097:64: required from ‘struct std::__ndk1::__is_assignable_imp<std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&, std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&, false>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2106:8: required from ‘struct std::__ndk1::is_assignable<std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&, std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:3774:29: required from ‘struct std::__ndk1::is_nothrow_assignable<std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&, std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:3841:50: [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2088:55: required by substitution of ‘template<class _Tp, class _Arg> typename std::__ndk1::__select_2nd<decltype ((declval<_Tp>)()=(declval<_Arg>)()), std::__ndk1::integral_constant<bool, true> >::type std::__ndk1::__is_assignable_test(int) [with _Tp = cocos2d::Console::Command&; _Arg = cocos2d::Console::Command&&]’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2097:64: required from ‘struct std::__ndk1::__is_assignable_imp<cocos2d::Console::Command&, cocos2d::Console::Command&&, false>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2106:8: required from ‘struct std::__ndk1::is_assignable<cocos2d::Console::Command&, cocos2d::Console::Command&&>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2127:50: required from ‘struct std::__ndk1::is_move_assignablecocos2d::Console::Command’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/utility:506:63: required from ‘struct std::__ndk1::pair<const std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>’
/Users/davidholtkamp/Development/igun-pro-2-client-cpp/cocos2d/cocos/./base/CCConsole.cpp:331:28: required from here
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/map:624:16: error: ‘std::__ndk1::__value_type<_Key, _Value>::__cc’ has incomplete type
value_type __cc;
^
In file included from /Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/__functional_base:19:0,
from /Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/thread:90,
from /Users/davidholtkamp/Development/igun-pro-2-client-cpp/cocos2d/cocos/./base/CCConsole.h:42,
from /Users/davidholtkamp/Development/igun-pro-2-client-cpp/cocos2d/cocos/./base/CCConsole.cpp:25:
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/utility:312:29: error: declaration of ‘std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>::value_type {aka struct std::__ndk1::pair<const std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>}’
struct _LIBCPP_TEMPLATE_VIS pair
^
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/utility: In instantiation of ‘struct std::__ndk1::pair<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>’:
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/map:625:21: required from ‘union std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2088:55: required by substitution of ‘template<class _Tp, class _Arg> typename std::__ndk1::__select_2nd<decltype ((declval<_Tp>)()=(declval<_Arg>)()), std::__ndk1::integral_constant<bool, true> >::type std::__ndk1::__is_assignable_test(int) [with _Tp = std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&; _Arg = std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&]’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2097:64: required from ‘struct std::__ndk1::__is_assignable_imp<std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&, std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&, false>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2106:8: required from ‘struct std::__ndk1::is_assignable<std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&, std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:3774:29: required from ‘struct std::__ndk1::is_nothrow_assignable<std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&, std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > >, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command> > >&&>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:3841:50: [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2088:55: required by substitution of ‘template<class _Tp, class _Arg> typename std::__ndk1::__select_2nd<decltype ((declval<_Tp>)()=(declval<_Arg>)()), std::__ndk1::integral_constant<bool, true> >::type std::__ndk1::__is_assignable_test(int) [with _Tp = cocos2d::Console::Command&; _Arg = cocos2d::Console::Command&&]’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2097:64: required from ‘struct std::__ndk1::__is_assignable_imp<cocos2d::Console::Command&, cocos2d::Console::Command&&, false>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2106:8: required from ‘struct std::__ndk1::is_assignable<cocos2d::Console::Command&, cocos2d::Console::Command&&>’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/type_traits:2127:50: required from ‘struct std::__ndk1::is_move_assignablecocos2d::Console::Command’
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/utility:506:63: required from ‘struct std::__ndk1::pair<const std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator >, cocos2d::Console::Command>’
/Users/davidholtkamp/Development/igun-pro-2-client-cpp/cocos2d/cocos/./base/CCConsole.cpp:331:28: required from here
/Users/davidholtkamp/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include/utility:506:63: error: incomplete type ‘std::__ndk1::is_move_assignablecocos2d::Console::Command’ used in nested name specifier
is_move_assignable<first_type>::value &&
This project was created using the newest version of Cocos2D-X a few months back. I am new to Android development so I have tried many different things to no avail on this. Any pointers to why this is happening would be much appreciated.