ndk android linker android-ndk static-libraries

android ndk location



NDK de Android: enlace utilizando una biblioteca estática precompilada (2)

Estoy tratando de portar Jnetpcap a Android para usarlo para analizar archivos .pcap. Jnetpcap es un contenedor java para libpcap que utiliza JNI. He compilado libpcap como una biblioteca estática utilizando el árbol de código fuente de Android.

Al compilar Jnetpcap como una biblioteca compartida, obtengo errores porque tengo que vincular con libpcap.a pero no sé cómo podría decirle a Android.mk que debe vincularlo con el archivo libpcap.a que tengo.

El uso de "LOCAL_STATIC_LIBRARIES: = libpcap" no funcionará porque libpcap no viene por defecto en el NDK de Android.

Si alguno de ustedes podría ayudarme, estaría muy agradecido.

Aquí está mi archivo actual de Android.mk:

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)


Finalmente lo resolvió. 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)


Tienes 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)

Esta compilación de pcap como módulo local que podría vincular con LOCAL_STATIC_LIBRARIES

solo agrega

LOCAL_STATIC_LIBRARIES := pcap

antes de llamar

include $(BUILD_SHARED_LIBRARY)