Taglib para Android

Estoy tratando de compilar Taglib para Android. He descargado la última versión de Taglib desde aquí . Después de compilarlo para arm-linux construir he importado con éxito en mi aplicación, pero cuando intento llamar a cualquier función de tag_c.h estoy recibiendo error siguiente:

 SharedLibrary : taglibwav.so /home/test/workspacenew/Androidtaglibexample/obj/local/armeabi/ objs/squared/taglibwav.o: In function `Java_com_android_androidtag_WavFileDetails_taglibwav': /home/test/workspacenew/Androidtaglibexample/jni/taglibwav.c:30: undefined reference to `taglib_set_strings_unicode' collect2: ld returned 1 exit status make: *** [/home/test/workspacenew/Androidtaglibexample/obj/ local/armeabi/taglibwav.so] Error 1 

La información de configuración de la aplicación es:

Taglib ./configure: –

 ./configure CC="/home/hcl/taglib/taglib/toolchain/bin/arm-linux-androideabi-gcc"\ --host="arm-linux" \ --build="arm" \ --enable-static="no" \ --enable-shared="yes" \ --prefix="/home/test/workspacenew/Androidtaglibexample/jni/testtaglib/"\ 

Android.mk: –

 LOCAL_PATH := $(call my-dir) #declare the prebuilt library include $(CLEAR_VARS) LOCAL_MODULE := taglibtest LOCAL_SRC_FILES := testtaglib/lib/libtag.a LOCAL_EXPORT_C_INCLUDES := testtaglib/include/taglib/ LOCAL_PRELINK_MODULE := true include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) include $(call all-subdir-makefiles) LOCAL_MODULE := taglibwav LOCAL_SRC_FILES := taglibwav.c LOCAL_C_INCLUDES := $(LOCAL_PATH)/testtaglib/include/taglib/ LOCAL_SHARED_LIBRARY := taglibtest LOCAL_LDLIBS := -llog -ljnigraphics -lz -lm -L$(SYSROOT)/usr/lib -llog include $(BUILD_SHARED_LIBRARY) 

Application.mk: –

 APP_ABI :=armeabi APP_STL:=stlport_static 

Taglibwav.c: –

 #include <jni.h> #include <tag_c.h> #include <android/log.h> #ifndef FALSE #define FALSE 0 #endif ....... ....... JNIEXPORT void JNICALL Java_com_android_androidtag_WavFileDetails_taglibwav (JNIEnv * ev, jclass jc){ int i; int seconds; int minutes; TagLib_File *file; //<< accessed form tag_c.h : OK TagLib_Tag *tag; //<< accessed form tag_c.h : OK const TagLib_AudioProperties *properties; //<<accessed form tag_c.h : OK taglib_set_strings_unicode(FALSE);//<<accessed form tag_c.h : GETTING ERROR } .... .... 

Android NDK Versión: – Android-Ndk-r7c

Por favor, guíame en la dirección correcta para arreglar lo que estoy haciendo mal

Creo que necesitará -ltag_c en algún lugar

  TagLib_File *file; //<< accessed form tag_c.h : OK TagLib_Tag *tag; //<< accessed form tag_c.h : OK const TagLib_AudioProperties *properties; //<<accessed form tag_c.h : OK taglib_set_strings_unicode(FALSE);//<<accessed form tag_c.h : GETTING ERROR 

La razón por la que no se puede acceder a taglib_set_strings_unicode es debido a cómo se define TAGLIB_C_EXPORT en tag_c.h.

 #if defined(_WIN32) || defined(_WIN64) #ifdef MAKE_TAGLIB_C_LIB #define TAGLIB_C_EXPORT __declspec(dllexport) #else #define TAGLIB_C_EXPORT __declspec(dllimport) #endif #elif defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1) #define TAGLIB_C_EXPORT __attribute__ ((visibility("default"))) #else #define TAGLIB_C_EXPORT #endif ... typedef struct { int dummy; } TagLib_File; typedef struct { int dummy; } TagLib_Tag; typedef struct { int dummy; } TagLib_AudioProperties; ... TAGLIB_C_EXPORT void taglib_set_strings_unicode(BOOL unicode); ... 

Para hacer el trabajo haría un tag_c.h en la línea 43 para definir las reglas de visibilidad apropiadas:

 #define TAGLIB_C_EXPORT __attribute__ ((visibility("default"))) 

Si esto funciona, puede abrir un error en taglib y vincularlo de nuevo a esta pregunta.

 LOCAL_STATIC_LIBRARY := taglibtest 

Está utilizando biblioteca estática, no compartida. La directiva de utilizar compartida confunde el entorno de compilación.

Necesitas enlazar tanto tag_c.h .o como taglibwav.o :

 gcc -o program tag_c.h taglibwav.c 
  • Qt Android: Al presionar "Hecho" no oculta el teclado
  • ¿Cuál es la diferencia en GCC entre -std = gnu ++ 0x y -std = c ++ 0x y cuál debe ser utilizado?
  • Incluye la biblioteca Boost C ++ en android
  • No se puede emitir desde el tipo de origen al tipo de destino (JNIEnv.GetArray <Java.Lang.Object> (pudis.Handle);)
  • No se pueden incluir archivos de encabezado STL con Android NDK r5
  • Soporte de versiones de Android para notificaciones push
  • Generador de números aleatorios comunes de iOS y Android
  • Utilizar una clase simple de C ++ en Android NDK
  • Qt Android: ¿Cómo mostrar el diálogo de archivo nativo?
  • Enviar int s entre Java y C
  • Cómo compilar C en un archivo binario ejecutable y ejecutarlo en Android desde Android Shell?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.