android c android-ndk taglib

Taglib para Android



c android-ndk (5)

Estoy tratando de compilar Taglib para Android. He descargado la última versión de Taglib desde here . Después de compilarlo para arm-linux build, lo he importado correctamente en mi aplicación, pero cuando intento llamar a cualquier función desde tag_c.h , tag_c.h siguiente error:

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) Aplicación.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 } .... ....

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

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


Creo que podrías necesitar -ltag_c en alguna parte



tag_c.h vincular tanto tag_c.h .o como taglibwav.o :

gcc -o program tag_c.h taglibwav.c


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 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); ...


LOCAL_STATIC_LIBRARY := taglibtest

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