Friday, 3 June 2016

android - ndk-build: undefined reference to .. errors when statically linking to libxml.a

I get a lot of undefined reference to ... errors when I compile my single c++ source-file using the ndk-build tool. For the record I use NDK r6 on a linux host system.



First of all I've been banging my head against this problem all day, so I am sorry if I am leaving something out or explaining myself a bit fast. Please ask me for any additional information.




My source-code has a lot of dependent libraries that I want to statically link to.
I have defined all my dependent libs of different in my Android.mk file as follows:



include $(CLEAR_VARS)

LOCAL_MODULE :=
LOCAL_SRC_FILES := lib.a
LOCAL_EXPORT_C_INCLUDES :=


include $(PREBUILT_STATIC_LIBRARY)



While I make sure that these are available in my jni/ folder as lib.a with my Android.mk and Application.mk files. (and my source file)
Also I've added STL support by adding APP_STL := stlport_static to my Application.mk file.
My single source file (riidr-jni.cpp) is at the moment:



#include 
#include
#include
#include "../com_riidr_apps_reader_RiidrEbookReaderActivity.h"

#include

void Java_com_riidr_apps_reader_RiidrEbookReaderActivity_init ( JNIEnv* env, jobject thiz ) {
__android_log_write(ANDROID_LOG_INFO, "Riidr", "JNI init - start");
dp::platformInit( dp::PI_DEFAULT );
}


If I uncomment the dp::platformInit( dp::PI_DEFAULT ); line and replace it with std::string test = "asd"; I have no errors at all, this makes me believe that the and therefore STL lib is correctly imported and linked.




The last instructions of my Android.mk file is this



include $(CLEAR_VARS)

LOCAL_MODULE := riidr-jni
LOCAL_SRC_FILES := riidr-jni.cpp
LOCAL_LDLIBS := -llog -ldl -lz
LOCAL_STATIC_LIBRARIES := \
hobbes \
dp \

adept \
mschema \
hobbes \
t3 \
xml \
mschema \
dp \
adept \
xml \
cryptopenssl \

fonts \
png \
jpeg \
ssl \
crypto \
expat \
cts \
hyphen \
curl


include $(BUILD_SHARED_LIBRARY)


The error I get when running the ndk-build tool is the following:




/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree_iterator >::operator++()':
xpath_context.cpp:(.text._ZNSt17_Rb_tree_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEppEv[std::_Rb_tree_iterator >::operator++()]+0x1c): undefined reference to
std::_Rb_tree_increment(std::_Rb_tree_node_base*)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree, std::_Select1st >, xpath::Context::ValueCompare, std::allocator > >::erase(std::_Rb_tree_iterator >)':
xpath_context.cpp:(.text._ZNSt8_Rb_treeIN3uft5ValueESt4pairIKS1_PN5xpath14DynamicContextEESt10_Select1stIS7_ENS4_7Context12ValueCompareESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_E[std::_Rb_tree, std::_Select1st >, xpath::Context::ValueCompare, std::allocator > >::erase(std::_Rb_tree_iterator >)]+0x28): undefined reference to
std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'

/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree, std::_Select1st >, xpath::Context::ValueCompare, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&)':
xpath_context.cpp:(.text._ZNSt8_Rb_treeIN3uft5ValueESt4pairIKS1_PN5xpath14DynamicContextEESt10_Select1stIS7_ENS4_7Context12ValueCompareESaIS7_EE10_M_insert_EPKSt18_Rb_tree_node_baseSG_RKS7_[std::_Rb_tree, std::_Select1st >, xpath::Context::ValueCompare, std::allocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair const&)]+0xc4): undefined reference to
std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree_const_iterator >::operator--()':
xpath_context.cpp:(.text._ZNSt23_Rb_tree_const_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEmmEv[std::_Rb_tree_const_iterator >::operator--()]+0x1c): undefined reference to
std::_Rb_tree_decrement(std::_Rb_tree_node_base const*)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree_const_iterator >::operator++()':
xpath_context.cpp:(.text._ZNSt23_Rb_tree_const_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEppEv[std::_Rb_tree_const_iterator >::operator++()]+0x1c): undefined reference to
std::_Rb_tree_increment(std::_Rb_tree_node_base const*)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function __gnu_cxx::new_allocator::allocate(unsigned int, void const*)':
xpath_context.cpp:(.text._ZN9__gnu_cxx13new_allocatorIPN4mdom4NodeEE8allocateEjPKv[__gnu_cxx::new_allocator::allocate(unsigned int, void const*)]+0x4c): undefined reference to
std::__throw_bad_alloc()'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function __gnu_cxx::new_allocator::allocate(unsigned int, void const*)':
xpath_context.cpp:(.text._ZN9__gnu_cxx13new_allocatorIN4mdom4NodeEE8allocateEjPKv[__gnu_cxx::new_allocator::allocate(unsigned int, void const*)]+0x4c): undefined reference to
std::__throw_bad_alloc()'

/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree_iterator >::operator--()':
xpath_context.cpp:(.text._ZNSt17_Rb_tree_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEmmEv[std::_Rb_tree_iterator >::operator--()]+0x1c): undefined reference to
std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::deque >::_M_new_elements_at_front(unsigned int)':
xpath_context.cpp:(.text._ZNSt5dequeIN4mdom4NodeESaIS1_EE24_M_new_elements_at_frontEj[std::deque >::_M_new_elements_at_front(unsigned int)]+0x58): undefined reference to
std::__throw_length_error(char const*)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::deque >::_M_new_elements_at_back(unsigned int)':
xpath_context.cpp:(.text._ZNSt5dequeIN4mdom4NodeESaIS1_EE23_M_new_elements_at_backEj[std::deque >::_M_new_elements_at_back(unsigned int)]+0x58): undefined reference to
std::__throw_length_error(char const*)'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function __gnu_cxx::new_allocator > >::allocate(unsigned int, void const*)':
xpath_context.cpp:(.text._ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEE8allocateEjPKv[__gnu_cxx::new_allocator > >::allocate(unsigned int, void const*)]+0x4c): undefined reference to
std::__throw_bad_alloc()'
/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_yacc.o): In function std::list >::_M_insert(std::_List_iterator, uft::Value* const&)':
xpath_yacc.cpp:(.text._ZNSt4listIPN3uft5ValueESaIS2_EE9_M_insertESt14_List_iteratorIS2_ERKS2_[std::list >::_M_insert(std::_List_iterator, uft::Value* const&)]+0x3c): undefined reference to
std::_List_node_base::hook(std::_List_node_base*)'

/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_yacc.o): In function __gnu_cxx::new_allocator >::allocate(unsigned int, void const*)':
xpath_yacc.cpp:(.text._ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN3uft5ValueEEE8allocateEjPKv[__gnu_cxx::new_allocator >::allocate(unsigned int, void const*)]+0x4c): undefined reference to
std::__throw_bad_alloc()'
collect2: ld returned 1 exit status
make: * [/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libriidr-jni.so] Error 1




Any info, questions or anything really is highly appreciated.

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...