【问题标题】:How to Integrate libxml2 native lib in Android-NDK project using CMakeLists.txt and AndroidStudio?如何使用 CMakeLists.txt 和 AndroidStudio 在 Android-NDK 项目中集成 libxml2 原生库?
【发布时间】:2017-12-15 06:05:03
【问题描述】:

请协助我在 Android NDK 中使用libxml2 native-lib - XML 解析库,使用CMakeLists.txt 配置。

我找到了来源here。但不知道如何在 AndroidStudio 中使用CMakeLists.txt 集成它。在我的 android-NDK 项目中需要从这个存储库中包含什么才能使用 libxml2?

【问题讨论】:

    标签: android android-studio android-ndk libxml2


    【解决方案1】:

    我尝试将 xml2 和 icuc 库添加到 Android 项目。 icuc 应该被添加,因为它被 xml2 lib 使用。我下载了libicuc.so和xml2源代码。

    这里我使用了 jni/ 文件夹中的 Android.mk 和 Application.mk 文件:

    # Filename: Application.mk
    APP_ABI=armeabi-v7a
    

    # Filename: Android.mk
    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE := icuuc
    LOCAL_SRC_FILES := libicuuc.so
    LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/icu/icu4c/source/common
    include $(PREBUILT_SHARED_LIBRARY)
    
    # include $(CLEAR_VARS)
    # LOCAL_MODULE := xml2
    # LOCAL_SRC_FILES := libxml2.so
    # LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/xml
    # LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/xml/include
    # include $(PREBUILT_SHARED_LIBRARY)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE    := xml2
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/xml
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/xml/include/
    LOCAL_SRC_FILES :=  xml/SAX.c \
                        xml/entities.c \
                        xml/encoding.c \
                        xml/error.c \
                        xml/parserInternals.c \
                        xml/parser.c \
                        xml/tree.c \
                        xml/hash.c \
                        xml/list.c \
                        xml/xmlIO.c \
                        xml/xmlmemory.c \
                        xml/uri.c \
                        xml/valid.c \
                        xml/xlink.c \
                        xml/debugXML.c \
                        xml/xpath.c \
                        xml/xpointer.c \
                        xml/xinclude.c \
                        xml/nanohttp.c \
                        xml/nanoftp.c \
                        xml/DOCBparser.c \
                        xml/catalog.c \
                        xml/globals.c \
                        #xml/threads.c \
                        xml/c14n.c \
                        xml/xmlstring.c \
                        xml/xmlregexp.c \
                        xml/xmlschemas.c \
                        xml/xmlschemastypes.c \
                        xml/xmlunicode.c \
                        xml/xmlreader.c \
                        xml/relaxng.c \
                        xml/dict.c \
                        xml/SAX2.c \
                        xml/legacy.c \
                        xml/chvalid.c \
                        xml/pattern.c \
                        xml/xmlsave.c \
                        xml/xmlmodule.c \
                        xml/xmlwriter.c \
                        xml/schematron.c
    
    LOCAL_SHARED_LIBRARIES := icuuc
    include $(BUILD_SHARED_LIBRARY)
    

    但是,我收到了 clang++ 链接器错误和许多未定义的引用错误,如下所示。我找不到任何解决方案来解决这个问题。

    C:\Users\user\AndroidStudioProjects\SatIP\jni>C:\Users\user\AppData\Local\Android\Sdk\ndk-bundle\ndk-bui
    ld
    Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-14.
    [armeabi-v7a] Install        : libicuuc.so => libs/armeabi-v7a/libicuuc.so
    [armeabi-v7a] Compile thumb  : xml2 <= SAX.c
    [armeabi-v7a] Compile thumb  : xml2 <= entities.c
    [armeabi-v7a] Compile thumb  : xml2 <= encoding.c
    [armeabi-v7a] Compile thumb  : xml2 <= error.c
    [armeabi-v7a] Compile thumb  : xml2 <= parserInternals.c
    [armeabi-v7a] Compile thumb  : xml2 <= parser.c
    [armeabi-v7a] Compile thumb  : xml2 <= tree.c
    [armeabi-v7a] Compile thumb  : xml2 <= hash.c
    [armeabi-v7a] Compile thumb  : xml2 <= list.c
    [armeabi-v7a] Compile thumb  : xml2 <= xmlIO.c
    [armeabi-v7a] Compile thumb  : xml2 <= xmlmemory.c
    [armeabi-v7a] Compile thumb  : xml2 <= uri.c
    [armeabi-v7a] Compile thumb  : xml2 <= valid.c
    [armeabi-v7a] Compile thumb  : xml2 <= xlink.c
    [armeabi-v7a] Compile thumb  : xml2 <= debugXML.c
    [armeabi-v7a] Compile thumb  : xml2 <= xpath.c
    [armeabi-v7a] Compile thumb  : xml2 <= xpointer.c
    [armeabi-v7a] Compile thumb  : xml2 <= xinclude.c
    [armeabi-v7a] Compile thumb  : xml2 <= nanohttp.c
    [armeabi-v7a] Compile thumb  : xml2 <= nanoftp.c
    [armeabi-v7a] Compile thumb  : xml2 <= DOCBparser.c
    [armeabi-v7a] Compile thumb  : xml2 <= catalog.c
    [armeabi-v7a] Compile thumb  : xml2 <= globals.c
    [armeabi-v7a] SharedLibrary  : libxml2.so
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:268: error: undefined reference to 'xmlStrEqua
    l'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:264: error: undefined reference to 'xmlStrEqua
    l'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:272: error: undefined reference to 'xmlStrEqua
    l'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:278: error: undefined reference to 'xmlStrEqua
    l'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:174: error: undefined reference to 'xmlDictLoo
    kup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:176: error: undefined reference to 'xmlDictLoo
    kup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:178: error: undefined reference to 'xmlDictLoo
    kup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:168: error: undefined reference to 'xmlStrdup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:170: error: undefined reference to 'xmlStrdup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:172: error: undefined reference to 'xmlStrdup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:181: error: undefined reference to 'xmlStrlen'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:184: error: undefined reference to 'xmlDictLoo
    kup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:186: error: undefined reference to 'xmlStrndup
    '
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:705: error: undefined reference to 'xmlStrdup'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:597: error: undefined reference to 'xmlStrstr'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:964: error: undefined reference to 'xmlStrchr'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:111: error: undefined reference to 'xmlDictOwn
    s'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:114: error: undefined reference to 'xmlDictOwn
    s'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:117: error: undefined reference to 'xmlDictOwn
    s'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/entities.c:119: error: undefined reference to 'xmlDictOwn
    s'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:113: error: undefined reference to 'ucnv_open_
    59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:119: error: undefined reference to 'ucnv_setTo
    UCallBack_59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:123: error: undefined reference to 'ucnv_setFr
    omUCallBack_59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:130: error: undefined reference to 'ucnv_open_
    59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:136: error: undefined reference to 'ucnv_close
    _59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:139: error: undefined reference to 'UCNV_TO_U_
    CALLBACK_STOP_59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:139: error: undefined reference to 'UCNV_FROM_
    U_CALLBACK_STOP_59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:145: error: undefined reference to 'ucnv_close
    _59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:146: error: undefined reference to 'ucnv_close
    _59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:1884: error: undefined reference to 'ucnv_conv
    ertEx_59'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2066: error: undefined reference to 'xmlBufUse
    '
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2069: error: undefined reference to 'xmlBufAva
    il'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2086: error: undefined reference to 'xmlBufGro
    w'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2087: error: undefined reference to 'xmlBufAva
    il'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2095: error: undefined reference to 'xmlBufEnd
    '
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2096: error: undefined reference to 'xmlBufCon
    tent'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2097: error: undefined reference to 'xmlBufShr
    ink'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/encoding.c:2098: error: undefined reference to 'xmlBufAdd
    Len'
    ...
    ...
    ...
    ...
    undefined reference to 'xmlSaveForm
    atFileTo'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3109: error: undefined reference to 'xmlRMutexL
    ock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3181: error: undefined reference to 'xmlRMutexU
    nlock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3092: error: undefined reference to 'xmlNewRMut
    ex'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3205: error: undefined reference to 'xmlRMutexL
    ock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3220: error: undefined reference to 'xmlRMutexU
    nlock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3215: error: undefined reference to 'xmlRMutexU
    nlock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3210: error: undefined reference to 'xmlRMutexU
    nlock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3281: error: undefined reference to 'xmlRMutexL
    ock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3295: error: undefined reference to 'xmlFreeRMu
    tex'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:3418: error: undefined reference to 'xmlRMutexL
    ock'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:2235: error: undefined reference to 'xmlIsPubid
    Char_tab'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:2235: error: undefined reference to 'xmlIsPubid
    Char_tab'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/catalog.c:1360: error: undefined reference to 'xmlGetThre
    adId'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Intern
    alSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2IsStan
    dalone'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2HasInt
    ernalSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2HasExt
    ernalSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Resolv
    eEntity'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2GetEnt
    ity'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Entity
    Decl'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Notati
    onDecl'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Attrib
    uteDecl'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Elemen
    tDecl'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Unpars
    edEntityDecl'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2SetDoc
    umentLocator'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2StartD
    ocument'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2EndDoc
    ument'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2StartE
    lement'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2EndEle
    ment'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Refere
    nce'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Charac
    ters'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Charac
    ters'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Proces
    singInstruction'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Commen
    t'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2GetPar
    ameterEntity'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2CDataB
    lock'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXHandler: error: undefined reference to 'xmlSAX2Extern
    alSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXLocator: error: undefined reference to 'xmlSAX2GetPub
    licId'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXLocator: error: undefined reference to 'xmlSAX2GetSys
    temId'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXLocator: error: undefined reference to 'xmlSAX2GetLin
    eNumber'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:xmlDefaultSAXLocator: error: undefined reference to 'xmlSAX2GetCol
    umnNumber'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Inter
    nalSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2IsSta
    ndalone'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2HasIn
    ternalSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2HasEx
    ternalSubset'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Resol
    veEntity'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Entit
    yDecl'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2SetDo
    cumentLocator'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Start
    Document'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2EndDo
    cument'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Start
    Element'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2EndEl
    ement'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Refer
    ence'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Chara
    cters'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Ignor
    ableWhitespace'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2Comme
    nt'
    C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/objs/xml2/xml/globals.o:C:/Users/user/An
    droidStudioProjects/SatIP/jni/xml/globals.c:docbDefaultSAXHandler: error: undefined reference to 'xmlSAX2GetPa
    rameterEntity'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:50: error: undefined reference to 'xmlNewMutex'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:61: error: undefined reference to 'xmlFreeMutex
    '
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:64: error: undefined reference to '__xmlGlobalI
    nitMutexDestroy'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:50: error: undefined reference to 'xmlNewMutex'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:565: error: undefined reference to 'xmlSAX2GetS
    ystemId'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:565: error: undefined reference to 'xmlSAX2GetC
    olumnNumber'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:565: error: undefined reference to 'xmlSAX2GetL
    ineNumber'
    C:/Users/user/AndroidStudioProjects/SatIP/jni/xml/globals.c:565: error: undefined reference to 'xmlSAX2GetP
    ublicId'
    clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [C:/Users/user/AndroidStudioProjects/SatIP/obj/local/armeabi-v7a/libxml2.so] Error 1
    

    【讨论】:

    • 感谢您的关注。当我使用带有 AndroidStudio2.0+ 的 CMake 构建系统时,它可能会有所帮助。但是我已经更新了我的答案。
    【解决方案2】:

    经过一番搜索和努力,我找到了一些解决方案。所以我想通过以下步骤回答我自己的问题:

    1. 在您的机器中从android/platform_external_libxml2 克隆源代码。

    2.在项目的适当位置添加所需的所有源文件和头文件。

    3.在Android.bp文件的帮助下,我成功配置了我的app/CMakeList.txt

    4.配置您的应用或库级别的 build.gradle 文件。

    这是我的 CMakeLists.txt :

                    cmake_minimum_required(VERSION 3.4.1)
    
                    set(LIBXML2_SOURCES
    
                    src/main/cpp/libxml2/src/SAX.c
                    src/main/cpp/libxml2/src/entities.c
                    src/main/cpp/libxml2/src/encoding.c
                    src/main/cpp/libxml2/src/error.c
                    src/main/cpp/libxml2/src/parserInternals.c
                    src/main/cpp/libxml2/src/parser.c
                    src/main/cpp/libxml2/src/tree.c
                    src/main/cpp/libxml2/src/hash.c
                    src/main/cpp/libxml2/src/list.c
                    src/main/cpp/libxml2/src/xmlIO.c
                    src/main/cpp/libxml2/src/xmlmemory.c
                    src/main/cpp/libxml2/src/uri.c
                    src/main/cpp/libxml2/src/valid.c
                    src/main/cpp/libxml2/src/xlink.c
                    src/main/cpp/libxml2/src/debugXML.c
                    src/main/cpp/libxml2/src/xpath.c
                    src/main/cpp/libxml2/src/xpointer.c
                    src/main/cpp/libxml2/src/xinclude.c
                    src/main/cpp/libxml2/src/DOCBparser.c
                    src/main/cpp/libxml2/src/catalog.c
                    src/main/cpp/libxml2/src/globals.c
                    src/main/cpp/libxml2/src/threads.c
                    src/main/cpp/libxml2/src/c14n.c
                    src/main/cpp/libxml2/src/xmlstring.c
                    src/main/cpp/libxml2/src/buf.c
                    src/main/cpp/libxml2/src/xmlregexp.c
                    src/main/cpp/libxml2/src/xmlschemas.c
                    src/main/cpp/libxml2/src/xmlschemastypes.c
                    src/main/cpp/libxml2/src/xmlunicode.c
                    src/main/cpp/libxml2/src/xmlreader.c
                    src/main/cpp/libxml2/src/relaxng.c
                    src/main/cpp/libxml2/src/dict.c
                    src/main/cpp/libxml2/src/SAX2.c
                    src/main/cpp/libxml2/src/xmlwriter.c
                    src/main/cpp/libxml2/src/legacy.c
                    src/main/cpp/libxml2/src/chvalid.c
                    src/main/cpp/libxml2/src/pattern.c
                    src/main/cpp/libxml2/src/xmlsave.c
                    src/main/cpp/libxml2/src/xmlmodule.c
                    src/main/cpp/libxml2/src/schematron.c
            )
    
            include_directories(src/main/cpp/libxml2/include)
    
            include_directories(src/main/cpp/libxml2/src)
    
            add_library( # Sets the name of the library.
             myexampe-native
    
             # Sets the library as a shared library.
             SHARED
    
             # Provides a relative path to your source file(s).
             src/main/cpp/my-native.cpp )
    
             add_library( # Sets the name of the library.
             mylibxml2
    
             # Sets the library as a shared library.
             SHARED
    
             # Provides a relative path to your source file(s).
             ${LIBXML2_SOURCES} )
    
             target_link_libraries( # Specifies the target library.
    
                       myexampe-native
    
                       mylibxml2
                       )
    

    这是我的 app/build.gradle 配置

                  android { .....
                  defaultConfig { .....
    
                  externalNativeBuild {
            cmake {
                cppFlags "-std=gnu++11"
                arguments '-DANDROID_PLATFORM=android-21',
                          '-DANDROID_STL=c++_shared','-DANDROID_ARM_MODE=arm'
    
            }
        }
    

    欢迎发表评论以获得任何澄清。 谢谢:-)

    【讨论】:

    • 感谢您的回复。你添加了icu库吗?应用您的解决方案后,我收到“未找到 unicode/ucnv.h 文件”错误。 icu 库包含 ucnv.h 文件。
    • 另外,我遇​​到了“错误:使用未声明的标识符 'xmlOnceInit'”。其原因是未定义 LIBXML_THREAD_ENABLED。所以,我手动定义了它,问题就解决了。但是,这不是正确的方法。实际上在编译之前它应该由'--with-threads'配置,但我无法正确配置它。在 Android.bp 中,为 shared_libs 添加了 libicuuc。所以,我正在尝试将 libicuuc 添加到我的项目中。
    • @OğuzhanKoşar iconv 是不需要的(因为我禁用了 android)。所以,我相应地配置了“/libxml2/include/libxml/xmlversion.h”和“/libxml2/src/config.h”(只是禁用它们)示例:#if 0 #define LIBXML_ICONV_ENABLED #endif *也禁用线程一#if 0 #defineLIBXML_THREAD_ENABLED #endif
    • LIBXML_ICONV_ENABLED 已被禁用,但我收到与 libicuuc 相关的未定义引用错误。 LIBXML_THREAD_ENABLED 也被禁用,但我需要启用它来修复“错误:编译threads.c时使用未声明的标识符'xmlOnceInit'。
    • 我在 xmlversion.h 中注释掉了“#define LIBXML_ICU_ENABLED”,现在看来可以了。
    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多