English 中文(简体)
ndk-build:在静态地与libxml.a挂钩时,未明确提及错误。
原标题: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    := <name>
LOCAL_SRC_FILES := lib<name>.a
LOCAL_EXPORT_C_INCLUDES := <header files related to this lib>

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 <string>
#include <jni.h>
#include <android/log.h>
#include "../com_riidr_apps_reader_RiidrEbookReaderActivity.h"
#include <dp_all.h>

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)

我在驾车时发现的错误如下:

/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator++() : xpath_context.cpp:(.text._ZNSt17_Rb_tree_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEppEv[std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator++()]+0x1c): undefined reference tostd::_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<uft::Value, std::pair<uft::Value const, xpath::DynamicContext*>, std::_Select1st<std::pair<uft::Value const, xpath::DynamicContext*> >, xpath::Context::ValueCompare, std::allocator<std::pair<uft::Value const, xpath::DynamicContext*> > >::erase(std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >) : xpath_context.cpp:(.text._ZNSt8_Rb_treeIN3uft5ValueESt4pairIKS1_PN5xpath14DynamicContextEESt10_Select1stIS7_ENS4_7Context12ValueCompareESaIS7_EE5eraseESt17_Rb_tree_iteratorIS7_E[std::_Rb_tree<uft::Value, std::pair<uft::Value const, xpath::DynamicContext*>, std::_Select1st<std::pair<uft::Value const, xpath::DynamicContext*> >, xpath::Context::ValueCompare, std::allocator<std::pair<uft::Value const, xpath::DynamicContext*> > >::erase(std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >)]+0x28): undefined reference tostd::_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<uft::Value, std::pair<uft::Value const, xpath::DynamicContext*>, std::_Select1st<std::pair<uft::Value const, xpath::DynamicContext*> >, xpath::Context::ValueCompare, std::allocator<std::pair<uft::Value const, xpath::DynamicContext*> > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair<uft::Value const, xpath::DynamicContext*> const&) : xpath_context.cpp:(.text._ZNSt8_Rb_treeIN3uft5ValueESt4pairIKS1_PN5xpath14DynamicContextEESt10_Select1stIS7_ENS4_7Context12ValueCompareESaIS7_EE10_M_insert_EPKSt18_Rb_tree_node_baseSG_RKS7_[std::_Rb_tree<uft::Value, std::pair<uft::Value const, xpath::DynamicContext*>, std::_Select1st<std::pair<uft::Value const, xpath::DynamicContext*> >, xpath::Context::ValueCompare, std::allocator<std::pair<uft::Value const, xpath::DynamicContext*> > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, std::pair<uft::Value const, xpath::DynamicContext*> const&)]+0xc4): undefined reference tostd::_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<std::pair<uft::Value const, xpath::DynamicContext*> >::operator--() : xpath_context.cpp:(.text._ZNSt23_Rb_tree_const_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEmmEv[std::_Rb_tree_const_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator--()]+0x1c): undefined reference tostd::_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<std::pair<uft::Value const, xpath::DynamicContext*> >::operator++() : xpath_context.cpp:(.text._ZNSt23_Rb_tree_const_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEppEv[std::_Rb_tree_const_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator++()]+0x1c): undefined reference tostd::_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<mdom::Node*>::allocate(unsigned int, void const*) : xpath_context.cpp:(.text._ZN9__gnu_cxx13new_allocatorIPN4mdom4NodeEE8allocateEjPKv[__gnu_cxx::new_allocator<mdom::Node*>::allocate(unsigned int, void const*)]+0x4c): undefined reference tostd::__throw_bad_alloc() /home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function __gnu_cxx::new_allocator<mdom::Node>::allocate(unsigned int, void const*) : xpath_context.cpp:(.text._ZN9__gnu_cxx13new_allocatorIN4mdom4NodeEE8allocateEjPKv[__gnu_cxx::new_allocator<mdom::Node>::allocate(unsigned int, void const*)]+0x4c): undefined reference tostd::__throw_bad_alloc() /home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator--() : xpath_context.cpp:(.text._ZNSt17_Rb_tree_iteratorISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEmmEv[std::_Rb_tree_iterator<std::pair<uft::Value const, xpath::DynamicContext*> >::operator--()]+0x1c): undefined reference tostd::_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<mdom::Node, std::allocator<mdom::Node> >::_M_new_elements_at_front(unsigned int) : xpath_context.cpp:(.text._ZNSt5dequeIN4mdom4NodeESaIS1_EE24_M_new_elements_at_frontEj[std::deque<mdom::Node, std::allocator<mdom::Node> >::_M_new_elements_at_front(unsigned int)]+0x58): undefined reference tostd::__throw_length_error(char const*) /home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_context.o): In function std::deque<mdom::Node, std::allocator<mdom::Node> >::_M_new_elements_at_back(unsigned int) : xpath_context.cpp:(.text._ZNSt5dequeIN4mdom4NodeESaIS1_EE23_M_new_elements_at_backEj[std::deque<mdom::Node, std::allocator<mdom::Node> >::_M_new_elements_at_back(unsigned int)]+0x58): undefined reference tostd::__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<std::_Rb_tree_node<std::pair<uft::Value const, xpath::DynamicContext*> > >::allocate(unsigned int, void const*) : xpath_context.cpp:(.text._ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN3uft5ValueEPN5xpath14DynamicContextEEEE8allocateEjPKv[__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<uft::Value const, xpath::DynamicContext*> > >::allocate(unsigned int, void const*)]+0x4c): undefined reference tostd::__throw_bad_alloc() /home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libxml.a(xpath_yacc.o): In function std::list<uft::Value*, std::allocator<uft::Value*> >::_M_insert(std::_List_iterator<uft::Value*>, uft::Value* const&) : xpath_yacc.cpp:(.text._ZNSt4listIPN3uft5ValueESaIS2_EE9_M_insertESt14_List_iteratorIS2_ERKS2_[std::list<uft::Value*, std::allocator<uft::Value*> >::_M_insert(std::_List_iterator<uft::Value*>, uft::Value* const&)]+0x3c): undefined reference tostd::_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<std::_List_node<uft::Value*> >::allocate(unsigned int, void const*) : xpath_yacc.cpp:(.text._ZN9__gnu_cxx13new_allocatorISt10_List_nodeIPN3uft5ValueEEE8allocateEjPKv[__gnu_cxx::new_allocator<std::_List_node<uft::Value*> >::allocate(unsigned int, void const*)]+0x4c): undefined reference tostd::__throw_bad_alloc() collect2: ld returned 1 exit status make: * [/home/creen/Projects/Riidr/workspace/RiidrEbookReader/obj/local/armeabi/libriidr-jni.so] Error 1

任何信息、问题或实际内容都受到高度赞赏。

问题回答

增加一行

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

to the Android.mk file and it should work. As explained in the ndk doc, it is because the ndk performs a debug checking even for avoiding runtime linking error and for some motivations it doesn t find the correct references in a pre-built library. Hope it coulds help.

页: 1

www.un.org/Depts/DGACM/index_spanish.htm 从我可以看到,你与平流固定图书馆有链接。 因此,我认为,你应当添加如下内容:-lstlportLOCAL_LDLIBS





相关问题
Android - ListView fling gesture triggers context menu

I m relatively new to Android development. I m developing an app with a ListView. I ve followed the info in #1338475 and have my app recognizing the fling gesture, but after the gesture is complete, ...

AsyncTask and error handling on Android

I m converting my code from using Handler to AsyncTask. The latter is great at what it does - asynchronous updates and handling of results in the main UI thread. What s unclear to me is how to handle ...

Android intent filter for a particular file extension?

I want to be able to download a file with a particular extension from the net, and have it passed to my application to deal with it, but I haven t been able to figure out the intent filter. The ...

Android & Web: What is the equivalent style for the web?

I am quite impressed by the workflow I follow when developing Android applications: Define a layout in an xml file and then write all the code in a code-behind style. Is there an equivalent style for ...

TiledLayer equivalent in Android [duplicate]

To draw landscapes, backgrounds with patterns etc, we used TiledLayer in J2ME. Is there an android counterpart for that. Does android provide an option to set such tiled patterns in the layout XML?

Using Repo with Msysgit

When following the Android Open Source Project instructions on installing repo for use with Git, after running the repo init command, I run into this error: /c/Users/Andrew Rabon/bin/repo: line ...

Android "single top" launch mode and onNewIntent method

I read in the Android documentation that by setting my Activity s launchMode property to singleTop OR by adding the FLAG_ACTIVITY_SINGLE_TOP flag to my Intent, that calling startActivity(intent) would ...

From Web Development to Android Development

I have pretty good skills in PHP , Mysql and Javascript for a junior developer. If I wanted to try my hand as Android Development do you think I might find it tough ? Also what new languages would I ...

热门标签