A ton of undefined reference erros when trying to build for Android

Hello,

I have a cocos2d-x cpp project that works well on iOS and now I’m trying to make it work on android. I’ve made progress and it seems to compile all the source files, but then I get these errors:

[armeabi-v7a] Gdbserver      : [arm-linux-androideabi-4.9] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup       : libs/armeabi-v7a/gdb.setup
[x86] Gdbserver      : [x86-4.9] libs/x86/gdbserver
[x86] Gdbsetup       : libs/x86/gdb.setup
[armeabi-v7a] StaticLibrary  : libcocos2dxstore.a
[armeabi-v7a] StaticLibrary  : libcocos2dxsoomlacommon.a
[armeabi-v7a] StaticLibrary  : libjansson.a
[armeabi-v7a] StaticLibrary  : libcpufeatures.a
[x86] StaticLibrary  : libcocos2dxstore.a
[x86] StaticLibrary  : libjansson.a
[x86] StaticLibrary  : libcpufeatures.a
[armeabi-v7a] SharedLibrary  : libcocos2dcpp.so
[x86] StaticLibrary  : libcocos2dxsoomlacommon.a
[x86] SharedLibrary  : libcocos2dcpp.so
jni/../../Classes//AnalyticXStringUtilAndroid.cpp:37: error: undefined reference to 'cocos2d::__Dictionary::objectForKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//AnalyticXStringUtilAndroid.cpp:41: error: undefined reference to 'cocos2d::__String::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//AnalyticXStringUtilAndroid.cpp:45: error: undefined reference to 'cocos2d::__String::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//AnalyticXStringUtilAndroid.cpp:57: error: undefined reference to 'cocos2d::__String::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//AppDelegate.cpp:57: error: undefined reference to 'cocos2d::GLViewImpl::create(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//AppDelegate.cpp:170: error: undefined reference to 'cocos2d::__NotificationCenter::postNotification(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//AppDelegate.o:AppDelegate.cpp:vtable for AppDelegate: error: undefined reference to 'cocos2d::Application::openURL(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//GameScene/EndingBalloon.cpp:37: error: undefined reference to 'cocos2d::Sprite::createWithSpriteFrameName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//GameScene/EndingBalloon.cpp:47: error: undefined reference to 'cocos2d::Sprite::createWithSpriteFrameName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
jni/../../Classes//GameScene/EndingBalloon.cpp:60: error: undefined reference to 'cocos2d::CallFunc::create(std::__1::function<void ()> const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::addChild(cocos2d::Node*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Node::getChildByName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Node::enumerateChildren(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<bool (cocos2d::Node*)>) const'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Node::removeChildByName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Node::setName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Node::removeComponent(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::setTexture(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::setSpriteFrame(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::setDisplayFrameWithAnimationName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::initWithSpriteFrameName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::initWithFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)'
./obj/local/armeabi-v7a/objs-debug/cocos2dcpp_shared/__/__/Classes//GameScene/EndingBalloon.o:EndingBalloon.cpp:vtable for EndingBalloon: error: undefined reference to 'cocos2d::Sprite::initWithFile(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cocos2d::Rect const&)'

The list goes on and on so I didn’t copy it all but it seems to includ every class I have in my project.
Here is my Android.mk file:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

#traverse all the directory and subdirectory
define walk
  $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
endef

#find all the file recursively under jni/
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes/)
FILE_LIST := $(filter %.cpp, $(ALLFILES))

LOCAL_SRC_FILES := PlatformUtilsAndroid.cpp \
                   EmailHelper.cpp \
                   StoreRatingHelper.cpp \
                   hellocpp/main.cpp \
                   $(FILE_LIST:$(LOCAL_PATH)/%=%)

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
                    $(LOCAL_PATH)/../../Classes/webview

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_store_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,./prebuilt-mk)
$(call import-module, extensions/cocos2dx-store)

I’m using cocos2d-x 3.6 and NDK r10e. I’m working on MacOSX 10.10 and I’m trying to build my project through the command line.
I tried using NDK r9d but I got the same errors.

Does anyone know how to solve this problem?

Thanks

OK, I think I found the problem in my Application.mk file, I replaced this:

APP_STL := c++_static

With this:

APP_STL := gnustl_static

And the errors stopped.