2011-03-14 4 views
1

J'essaie d'exécuter libxml2 à partir de l'Android NDK (pour le portage de divers codes de l'iPhone). J'ai réussi à obtenir le code de base pour compiler et reconnaître les fichiers d'en-tête de libxml mais je ne peux pas utiliser une méthode (je reçois undefined reference erreurs)libxml2 avec Android NDK

D'après ce que j'ai compris c'est parce que le NDK n'est pas liant vraiment la bibliothèque libxml - ainsi tous les en-têtes des fichiers .h fonctionnent mais les méthodes ne sont pas vraiment là.

Quelqu'un a déjà réussi cela?

C'est le Android.mk actuel fichier

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := xpathParser 
LOCAL_SRC_FILES := xpathParser.c 

LOCAL_C_INCLUDES += /Developer/SDKs/MacOSX10.6.sdk/usr/include/libxml2 

LOCAL_CFLAGS := -Werror 
LOCAL_LDLIBS := -ldl -llog 
LOCAL_STATIC_LIBRARIES := -llibxml2 

include $(BUILD_SHARED_LIBRARY) 

Et le code C:

JNIEXPORT void JNICALL Java_com_mycompany_libxmltest_LibXMLTest_nativeInit(JNIEnv * env, jobject obj) 
{ 
    xmlDocPtr doc; 
    xmlXPathContextPtr xpathCtx; 
    xmlXPathObjectPtr xpathObj; 
    const char* filename; 

#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_SAX1_ENABLED) 
    LOGD("---- LIBXMLTEST ---- HAS LIBXML! %d",XML_PARSE_RECOVER); 

    /* THESE ARE ALL UNDEFINED REFERENCES WHEN COMPILED */ 
    xmlInitParser(); 
    xmlFreeDoc(doc); 
    xmlLineNumbersDefault(1); 
#else 
     LOGD("---- LIBXMLTEST ---- CAN'T FIND LIBXML!"); 
#endif 

} 
+0

libxml n'est pas disponible à partir du NDK. Vous aurez besoin de le porter/de le construire vous-même. –

+0

J'ai répondu à la question similaire Vous pouvez consulter

Répondre

0

LOCAL_STATIC_LIBRARIES valeurs ne ont pas besoin le préfixe '-l', cela peut être la cause de votre problème. Utilisez ceci à la place:

LOCAL_STATIC_LIBRARIES := libxml2 
# or /path/to/libxml2/lib/libxml2 for example