Errors when linking sdkbox libraries with ndk r13b, clang and c++_static stl

I’d just like to add my “+1” to this. I’m getting close to the stage where I’m going to want to ad ads/iaps to my game and the plan was to use SKDBOX. I’m using r13. I might try to switch to an older NDK, otherwise I guess I won’t be using SDKBOX.

SDKBOX works with r13, this issue is with c++_static lib which is not the default std lib for cocos2d-x

That’s awesome, thanks for the info! I’ll be giving it a try soon.

gnustl_static library of SDKBOX works perfect with ndk r13b. But c++_static versions of SDKBOX libraries still not working. Please, could you provide updated libraries?

Hi, we are having the same issue. We can’t make SDKBox work with ndk r13b and c++_static.

Will this be fixed in future versions?

Thanks

sdkbox also doesnt work with crystax NDK ( sad

we’re working on it, so far we managed to get dynamic lib working which means the previous automated integration will need a big change, since they’re designed for static lib

1 Like

any news??

v2.3.15 Support NDK r14b c++_static

thanks, where i can file a bug?
because it’s still fail when linking

jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(LogAndroid.o):function sdkbox::Logger::PlatformInit(): error: undefined reference to ‘std::__1::locale::locale()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(LogAndroid.o):function sdkbox::Logger::PlatformInit(): error: undefined reference to ‘std::__1::cout’

which ndk versoin?

14b

running: ‘/home/andrew/ndk/android-ndk-r14b/ndk-build -C /home/andrew/work/sources/cocos2d/liftemall-next/proj.android-studio/app -j4 NDK_MODULE_PATH=/home/andrew/work/sources/cocos2d/liftemall-next/cocos2d:/home/andrew/work/sources/cocos2d/liftemall-next/cocos2d/cocos:/home/andrew/work/sources/cocos2d/liftemall-next/cocos2d/external NDK_TOOLCHAIN_VERSION=4.9 NDK_DEBUG=1’

part of Application.mk

APP_STL := c++_static

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic

APP_ABI := armeabi

full error log:

[armeabi] SharedLibrary : libMyGame.so
jni/…/…/…/Classes/scenes/IAPExampleScene.cpp:106: error: undefined reference to ‘sdkbox::IAP::purchase(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:211: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::showLeaderboard(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:223: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::unlockAchievement(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:227: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::incrementAchievement(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, double)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:228: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::incrementAchievement(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, double)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:232: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::getMyScore(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, int, int)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:237: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::getPlayerCenteredScores(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, int, int, int)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:245: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::submitScore(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, long)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:249: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::setSteps(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, double)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:253: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::reveal(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:286: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::getPlayerAccountField(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&)’
jni/…/…/…/Classes/scenes/PlayExampleScene.cpp:288: error: undefined reference to ‘sdkbox::PluginSdkboxPlay::getPlayerAccountField(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&)’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(GPGAchievementsProxy.o):function std::__1::shared_ptrsdkbox::JNIMethodInfo::~shared_ptr(): error: undefined reference to ‘std::__1::__shared_weak_count::__release_shared()’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::sentry::~sentry(): error: undefined reference to ‘std::__1::ios_base::clear(unsigned int)’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::flush(): error: undefined reference to ‘std::__1::ios_base::clear(unsigned int)’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::ios_base::getloc() const’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::locale::use_facet(std::__1::locale::id&) const’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::locale::~locale()’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::ios_base::getloc() const’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::locale::use_facet(std::__1::locale::id&) const’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::locale::~locale()’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::ios_base::clear(unsigned int)’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits > >::id’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(int): error: undefined reference to ‘std::__1::ctype::id’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >& std::__1::operator<< <std::__1::char_traits >(std::__1::basic_ostream<char, std::__1::char_traits >&, char const*): error: undefined reference to ‘std::__1::ios_base::getloc() const’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >& std::__1::operator<< <std::__1::char_traits >(std::__1::basic_ostream<char, std::__1::char_traits >&, char const*): error: undefined reference to ‘std::__1::locale::use_facet(std::__1::locale::id&) const’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >& std::__1::operator<< <std::__1::char_traits >(std::__1::basic_ostream<char, std::__1::char_traits >&, char const*): error: undefined reference to ‘std::__1::locale::~locale()’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >& std::__1::operator<< <std::__1::char_traits >(std::__1::basic_ostream<char, std::__1::char_traits >&, char const*): error: undefined reference to ‘std::__1::ios_base::clear(unsigned int)’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function std::__1::basic_ostream<char, std::__1::char_traits >& std::__1::operator<< <std::__1::char_traits >(std::__1::basic_ostream<char, std::__1::char_traits >&, char const*): error: undefined reference to ‘std::__1::ctype::id’
jni/./PluginSdkboxPlay/libs_c++_static/armeabi/libPluginSdkboxPlay.a(SdkboxPlayWrapper-android.o):function sdkbox::SdkboxPlayWrapperEnabled::resetAchievements(): error: undefined reference to ‘std::__1::cout’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function std::__1::basic_streambuf<char, std::__1::char_traits >::~basic_streambuf(): error: undefined reference to ‘std::__1::locale::~locale()’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function std::__1::basic_ios<char, std::__1::char_traits >::~basic_ios(): error: undefined reference to ‘std::__1::ios_base::~ios_base()’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(long): error: undefined reference to ‘std::__1::ios_base::getloc() const’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(long): error: undefined reference to ‘std::__1::locale::use_facet(std::__1::locale::id&) const’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(long): error: undefined reference to ‘std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits > >::id’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(long): error: undefined reference to ‘std::__1::ctype::id’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::__notifyByProduct(sdkbox::Product const&): error: undefined reference to ‘std::__1::ios_base::init(void*)’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):function sdkbox::IAPWrapperEnabled::__notifyByProduct(sdkbox::Product const&): error: undefined reference to ‘std::__1::locale::locale()’
jni/./PluginIAP/libs_c++_static/armeabi/libPluginIAP.a(IAPWrapper.o):typeinfo for std::__1::basic_ios<char, std::__1::char_traits >: error: undefined reference to ‘typeinfo for std::__1::ios_base’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(unsigned int): error: undefined reference to ‘std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits > >::id’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function std::__1::basic_ostream<char, std::__1::char_traits >::operator<<(unsigned int): error: undefined reference to ‘std::__1::ctype::id’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function sdkbox::AdBooster::adInit(): error: undefined reference to ‘std::__1::__shared_weak_count::__release_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > sdkbox::utils::tostr(int const&): error: undefined reference to ‘std::__1::ios_base::init(void*)’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > sdkbox::utils::tostr(int const&): error: undefined reference to ‘std::__1::locale::locale()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function sdkbox::AdBooster::adRquest(): error: undefined reference to ‘std::__1::ios_base::init(void*)’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function sdkbox::AdBooster::adRquest(): error: undefined reference to ‘std::__1::locale::locale()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(AdBooster.o):function sdkbox::AdBooster::adRquest(): error: undefined reference to ‘std::__1::__shared_weak_count::__release_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(Base64.o):function std::__1::__shared_ptr_pointer<char*, std::__1::default_delete, std::__1::allocator >::~__shared_ptr_pointer(): error: undefined reference to ‘std::__1::__shared_weak_count::~__shared_weak_count()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(Base64.o):typeinfo for std::__1::__shared_ptr_pointer<char*, std::__1::default_delete, std::__1::allocator >: error: undefined reference to ‘typeinfo for std::__1::__shared_weak_count’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(ConfigManager.o):function sdkbox::DownloadConfigXHRListener::onLoad(sdkbox::XMLHttpRequest const&): error: undefined reference to ‘std::__1::__shared_weak_count::__release_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(RequestManager.o):function std::__1::__shared_ptr_pointer<sdkbox::XMLHttpRequest*, std::__1::default_deletesdkbox::XMLHttpRequest, std::__1::allocatorsdkbox::XMLHttpRequest >::~__shared_ptr_pointer(): error: undefined reference to ‘std::__1::__shared_weak_count::~__shared_weak_count()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(RequestManager.o):function void std::__1::vector<std::__1::shared_ptrsdkbox::XMLHttpRequest, std::__1::allocator<std::__1::shared_ptrsdkbox::XMLHttpRequest > >::__push_back_slow_path<std::__1::shared_ptrsdkbox::XMLHttpRequest const&>(std::__1::shared_ptrsdkbox::XMLHttpRequest const&): error: undefined reference to ‘std::__1::__shared_weak_count::__add_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(RequestManager.o):function sdkbox::RequestManager::__addRequestImpl(sdkbox::XMLHttpRequest*): error: undefined reference to ‘std::__1::__shared_weak_count::__add_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(RequestManager.o):function sdkbox::RequestManager::__addRequestImpl(sdkbox::XMLHttpRequest*): error: undefined reference to ‘std::__1::__shared_weak_count::__add_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(RequestManager.o):typeinfo for std::__1::__shared_ptr_pointer<sdkbox::XMLHttpRequest*, std::__1::default_deletesdkbox::XMLHttpRequest, std::__1::allocatorsdkbox::XMLHttpRequest >: error: undefined reference to ‘typeinfo for std::__1::__shared_weak_count’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(SdkboxCore.o):function std::__1::__shared_ptr_pointer<sdkbox::AppLifeCycleListener*, std::__1::default_deletesdkbox::AppLifeCycleListener, std::__1::allocatorsdkbox::AppLifeCycleListener >::~__shared_ptr_pointer(): error: undefined reference to ‘std::__1::__shared_weak_count::~__shared_weak_count()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(SdkboxCore.o):function std::__1::vector<std::__1::shared_ptrsdkbox::AppLifeCycleListener, std::__1::allocator<std::__1::shared_ptrsdkbox::AppLifeCycleListener > >::vector(std::__1::vector<std::__1::shared_ptrsdkbox::AppLifeCycleListener, std::__1::allocator<std::__1::shared_ptrsdkbox::AppLifeCycleListener > > const&): error: undefined reference to ‘std::__1::__shared_weak_count::__add_shared()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(SdkboxCore.o):typeinfo for std::__1::__shared_ptr_pointer<sdkbox::AppLifeCycleListener*, std::__1::default_deletesdkbox::AppLifeCycleListener, std::__1::allocatorsdkbox::AppLifeCycleListener >: error: undefined reference to ‘typeinfo for std::__1::__shared_weak_count’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(Utils.o):function sdkbox::utils::split(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, char, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > > >&): error: undefined reference to ‘std::__1::ios_base::init(void*)’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(Utils.o):function sdkbox::utils::split(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, char, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > > >&): error: undefined reference to ‘std::__1::locale::locale()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(XMLHttpRequest.o):function std::__1::__shared_ptr_pointer<sdkbox::XMLHttpRequestListener*, std::__1::default_deletesdkbox::XMLHttpRequestListener, std::__1::allocatorsdkbox::XMLHttpRequestListener >::~__shared_ptr_pointer(): error: undefined reference to ‘std::__1::__shared_weak_count::~__shared_weak_count()’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(XMLHttpRequest.o):typeinfo for std::__1::__shared_ptr_pointer<sdkbox::XMLHttpRequestListener*, std::__1::default_deletesdkbox::XMLHttpRequestListener, std::__1::allocatorsdkbox::XMLHttpRequestListener >: error: undefined reference to ‘typeinfo for std::__1::__shared_weak_count’
jni/./sdkbox/libs_c++_static/armeabi/libsdkbox.a(LogAndroid.o):function sdkbox::Logger::PlatformInit(): error: undefined reference to ‘std::__1::cout’
collect2: error: ld returned 1 exit status
make: *** [obj/local/armeabi/libMyGame.so] Error 1
make: Leaving directory `/home/andrew/work/sources/cocos2d/liftemall-next/proj.android-studio/app’
Error running command, return code: 2.

sdkbox and plugins are v2.3.15.2
cocos2d-x 3.15.1

looks like it’s related to this issue http://www.sdkbox.com/answers/question/c_static-support/?show_answer=387#answer_387
because your library still have __1 instead of __ndk1

objdump -D proj.android-studio/app/jni/sdkbox/libs_c++_static/armeabi/libsdkbox.a | grep basic_string | tail -1
00000000 <.ARM.exidx.text._ZN6sdkbox12NativeBridge19RemoveEventListenerERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPNS1_8functionIFvS9_P8_jobjectEEE>:

for example, my test library based on https://github.com/googlesamples/android-ndk/tree/master/hello-libs with ndk14b

objdump -D distribution/gmath/lib/armeabi/libgmath.a | grep basic_string | tail -1
00000000 <_ZTVNSt6__ndk118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE>:

could you plz help to check this again with staging ?

sdkbox import  admob --staging

I don’t using admob. Only PluginIAP and PluginSdkboxPlay (see error log Errors when linking sdkbox libraries with ndk r13b, clang and c++_static stl). Both installed manually.

I updated the libraries on staging. It should work now with r14b + APP_STL := c++_static.

now it’s linking and working, thanks.

1 Like

ccoco2d-x3.6 和r10e + APP_STL:= c ++ _ static, 使用sdkbox-chartboost_v2.3.17.3编译还是有问题

ccoco2d-x3.6 and NDK-r10e + APP_STL:= c ++ _ static, sdkbox-chartboost_v2.3.17.3 There are problems with compiling

你试一下 staging 的版本呢