Enlace de la biblioteca compartida en Android NDK

I con el éxito compila la biblioteca LibXtract al objeto compartido libxtract.so y quiere utilizar está en el segundo proyecto.

En proyecto de la mención intento compilarlo en la función simple:

#include <com_androidnative1_NativeClass.h> #include <android/log.h> #include "libxtract.h" JNIEXPORT void JNICALL Java_com_androidnative1_NativeClass_showText (JNIEnv *env, jclass clazz) { float mean = 0, vector[] = {.1, .2, .3, .4, -.5, -.4, -.3, -.2, -.1}, spectrum[10]; int n, N = 9; float argf[4]; argf[0] = 8000.f; argf[1] = XTRACT_MAGNITUDE_SPECTRUM; argf[2] = 0.f; argf[3] = 0.f; xtract[XTRACT_MEAN]((void *)&vector, N, 0, (void *)&mean); __android_log_print(ANDROID_LOG_DEBUG, "LIbXtract", "Button pushe2"); } 

Tengo la estructura plana:

  • Jni / com_androidnative1_NativeClass.c
  • Jni / com_androidnative1_NativeClass.hjni / libxtract.h
  • Jni / otros archivos * .h de la interfaz de libxtract
  • Jni / Android.mk
  • Jni / Applicatoin.mk

Biblioteca libxtract.so lo puse en la carpeta mainproject / lib

Mi archivo Android.mk se ve así:

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := com_androidnative1_NativeClass.c LOCAL_MODULE := com_androidnative1_NativeClass LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ LOCAL_LDLIBS += -llog LOCAL_SHARE_LIBRARIES := libxtract NDK_MODULE_PATH += $(LOCAL_PATH)/../lib/ include $(BUILD_SHARED_LIBRARY) 

Y todavía tengo error:

 Compile thumb : com_androidnative1_NativeClass <= com_androidnative1_NativeClass.c SharedLibrary : libcom_androidnative1_NativeClass.so./obj/local/armeabi/objs/com_androidnative1_NativeClass/com_androidnative1_Nativ eClass.o: In function `Java_com_androidnative1_NativeClass_showText': /home/jack/Projects/AndroidNative1/jni/com_androidnative1_NativeClass.c:20: undefined reference to `xtract' collect2: ld returned 1 exit status make: *** [obj/local/armeabi/libcom_androidnative1_NativeClass.so] Error 1 

Código vino ejemplo de forma de LibXtract y bajo C + + compilar sin problemas, alguna idea?

Tu archivo de Android debe ser …

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LIB_PATH := $(LOCAL_PATH)/../lib LOCAL_SRC_FILES := com_androidnative1_NativeClass.c LOCAL_MODULE := com_androidnative1_NativeClass LOCAL_LDLIBS += -llog 

LOCAL_LDLIBS + = $ (LIB_PATH) -lxtract

 LOCAL_SHARE_LIBRARIES := libxtract include $(BUILD_SHARED_LIBRARY) 

Pruebe este archivo make en su segundo proyecto, y puede crear correctamente su código sin tener ningún error.

Debe informar a los scripts de creación de Android NDK sobre su biblioteca compartida. Compruebe ${NDK}/doc/PREBUILTS.html para obtener instrucciones sobre cómo hacer esto. Aconsejan agregar Android.mk en el mismo directorio donde tienes tu libXtract.so :

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libXtract LOCAL_SRC_FILES := libXtract.so include $(PREBUILT_SHARED_LIBRARY) 

ndk-build depuración: supongo que está utilizando ndk-build para construir su "segundo proyecto". Intente ejecutar ndk-build con V=99 (intente V=99 ndk-build o ndk-build V=99 – fallando mi memoria). Esto le mostrará el comando de enlace que falla exacto. Probablemente tendrás opciones -lXtract y -L/path/to/libXtract/library . (A veces es conveniente copiar y pegar el comando de enlace para ejecutarlo manualmente para encontrar las opciones adecuadas para vincular correctamente, antes de arreglar la configuración de compilación).

Actualización: Ahora veo el comentario @ @ codetiger parece apuntar a un mismo tipo de respuesta (sin mencionar el documento NDK que es buena lectura – por lo que no estoy borrando esta respuesta).

En la respuesta anterior todo está bien, excepto uno.

Cuando deseamos enlazar lib debemos add -L antes de LOCAL_LDLIBS dir como se LOCAL_LDLIBS continuación.

 LIB_PATH := $(LOCAL_PATH)/../lib LOCAL_LDLIBS += **-L**$(LIB_PATH) -lxtract 

Else dará error como abajo

No puede abrir XXX /../ lib: Permiso denegado

  • Aplicación de NDK de Android para la preinstalación
  • Cómo utilizar android ndk para acceder a la cámara
  • Per-file CPPFLAGS en Android.mk
  • Uso de Android NDK y C ++
  • Cómo agregar código nativo de Android a LibGDX?
  • Android / GDB - Dolor de cabeza - no puede encontrar símbolos de depuración
  • Cómo acceder a la biblioteca libmediaplayerservice propia de libmedia_jni en Android Gingerbread
  • Poppler biblioteca para aplicación Android (NDK) será posible en lugar de xpdf?
  • Problemas de construcción de openssl para Android
  • Construyendo SDL para ARM usando la herramienta independiente de Android
  • ¿Cómo empaquetar la aplicación de línea de comandos nativa en apk?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.