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:
- Uso de libVLC para Android en la plataforma Windows
- Algunos tutoriales para OpenGL ES 2 en Android con NDK?
- ¿Es posible interceptar datos de voz durante la llamada?
- Android ndk UnsatisfiedLinkError al usar una biblioteca compartida precompuesta
- Error de compilación con ndk jni para curl
#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?
- Googletest para Android NDK
- ¿Qué sustituye a GraphicBuffer en Android 7.0?
- Cómo agregar efectos de sonido en un archivo de sonido en Android
- ¿Cómo puedo vincular la biblioteca compartida precompuesta al proyecto NDK de Android?
- Crear mapa de bits de la matriz de bytes, que se descomprime desde un archivo JPEG a través de libjpeg
- Una buena manera de identificar la sección de código en / proc / * / maps
- NDK Debug para Nexus 9 arm64-v8a no funciona para eclipse
- Android NDK - escribir sólo en C / C ++
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
- Cómo obtener Miniatura de vídeo en línea sin descargar en android
- Android: buenas prácticas para organizar dirs y archivos en almacenamiento Tarjeta SD?