Android NDK: Enlace mediante una biblioteca estática precompilada
Estoy tratando de puerto Jnetpcap a Android con el fin de utilizarlo para el análisis de archivos .pcap. Jnetpcap es un contenedor java para libpcap que usa JNI. He compilado libpcap como una biblioteca estática usando el árbol del código fuente del androide.
Al compilar Jnetpcap como una biblioteca compartida estoy recibiendo errores porque tengo que vincular con libpcap.a pero no sé cómo podría decir Android.mk que debe vincular con el archivo libpcap.a que tengo.
- ¿Cómo puedo enlazar la biblioteca nativa en Android Studio?
- ¿Cuáles son las posibles causas de "fallo en el mapeo del segmento desde el objeto compartido: operación no permitida", y cómo depurar?
- Android NDK / JNI: Creación de una biblioteca compartida que depende de otras bibliotecas compartidas
- Android NDK: no hay tabla de símbolos de archivo
- Carga de bibliotecas compartidas que dependen de otras librerías compartidas
Usar "LOCAL_STATIC_LIBRARIES: = libpcap" no funcionará porque libpcap no viene por defecto en el androide NDK.
Si alguno de ustedes me pudiera ayudar, estaría muy agradecido.
Aquí está mi archivo Android.mk actual:
include /home/sergio/workspace/MyApp/jni/libpcap/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := jnetpcap LOCAL_SRC_FILES :=\ jnetpcap.cpp\ packet_flow.cpp\ packet_jheader.cpp\ jnetpcap_pcap_header.cpp\ nio_jbuffer.cpp\ winpcap_stat_ex.cpp\ winpcap_send_queue.cpp\ winpcap_ext.cpp\ jnetpcap_ids.cpp\ jnetpcap_dumper.cpp\ jnetpcap_utils.cpp\ util_in_cksum.cpp\ jnetpcap_beta.cpp\ nio_jmemory.cpp\ packet_jsmall_scanner.cpp\ packet_protocol.cpp\ nio_jnumber.cpp\ packet_jheader_scanner.cpp\ library.cpp\ packet_jscan.cpp\ jnetpcap_pcap100.cpp\ util_checksum.cpp\ packet_jpacket.cpp\ winpcap_ids.cpp\ jnetpcap_bpf.cpp LOCAL_C_INCLUDES := /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include /home/sergio/workspace/Shark/jni/libpcap LOCAL_STATIC_LIBRARIES := libpcap include $(BUILD_SHARED_LIBRARY)
- Android: No se puede cargar la biblioteca (94 tablas esenciales que faltan)
- error de vinculación a libgcc.a cuando la recopilación cruzada para Android, pero existen símbolos?
- Vinculación fallando para PCRE cuando se usa la herramienta independiente NDK de Android
- Android NDK eabi - ¿Cómo hacer que ndk sepa usar fp duro?
- GCC: Prueba de herencia simple falla
- No se puede cargar la biblioteca compartida nativa con dependencias en una aplicación de actividad nativa
- Std :: map linker error ndk r8c con APP_STL: = gnustl_static
Usted tiene que construir pcap como módulo estático. Algo como esto
include $(CLEAR_VARS) LOCAL_MODULE := pcap LOCAL_CFLAGS := declare_flags LOCAL_C_INCLUDES := declare_include LOCAL_SRC_FILES := src_files include $(BUILD_STATIC_LIBRARY)
Este compilar pcap como módulo local que se puede vincular con LOCAL_STATIC_LIBRARIES
solo agrega
LOCAL_STATIC_LIBRARIES := pcap
Antes de llamar
include $(BUILD_SHARED_LIBRARY)
Finalmente lo resolví. Mi código de Android.mk:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libpcap LOCAL_SRC_FILES := libpcap.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := jnetpcap LOCAL_SRC_FILES :=\ jnetpcap.cpp\ packet_flow.cpp\ packet_jheader.cpp\ jnetpcap_pcap_header.cpp\ nio_jbuffer.cpp\ winpcap_stat_ex.cpp\ winpcap_send_queue.cpp\ winpcap_ext.cpp\ jnetpcap_ids.cpp\ jnetpcap_dumper.cpp\ jnetpcap_utils.cpp\ util_in_cksum.cpp\ jnetpcap_beta.cpp\ nio_jmemory.cpp\ packet_jsmall_scanner.cpp\ packet_protocol.cpp\ nio_jnumber.cpp\ packet_jheader_scanner.cpp\ library.cpp\ packet_jscan.cpp\ jnetpcap_pcap100.cpp\ util_checksum.cpp\ packet_jpacket.cpp\ winpcap_ids.cpp\ jnetpcap_bpf.cpp LOCAL_C_INCLUDES :=\ /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include\ /home/sergio/workspace/MyApp/jni/libpcap LOCAL_STATIC_LIBRARIES := libpcap include $(BUILD_SHARED_LIBRARY)