Android NDK: ссылка с использованием предварительно скомпилированной статической библиотеки
Я пытаюсь портировать Jnetpcap на Android, чтобы использовать его для анализа файлов.pcap. Jnetpcap - это Java-оболочка для libpcap, которая использует JNI. Я скомпилировал libpcap как статическую библиотеку, используя дерево исходного кода Android.
При компиляции Jnetpcap в качестве разделяемой библиотеки я получаю ошибки, потому что мне приходится связываться с libpcap.a, но я не знаю, как мне сказать Android.mk, что он должен связываться с имеющимся у меня файлом libpcap.a.
Использование "LOCAL_STATIC_LIBRARIES:= libpcap" не будет работать, потому что libpcap не поставляется по умолчанию в Android NDK.
Если бы кто-нибудь из вас, ребята, мог помочь мне, я был бы очень благодарен.
Вот мой текущий файл 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)
2 ответа
Вы должны собрать pcap как статический модуль. Что-то вроде этого
include $(CLEAR_VARS)
LOCAL_MODULE := pcap
LOCAL_CFLAGS := declare_flags
LOCAL_C_INCLUDES := declare_include
LOCAL_SRC_FILES := src_files
include $(BUILD_STATIC_LIBRARY)
Эта сборка pcap как локальный модуль, который вы можете связать с LOCAL_STATIC_LIBRARIES
просто добавь
LOCAL_STATIC_LIBRARIES := pcap
перед звонком
include $(BUILD_SHARED_LIBRARY)
Наконец-то решил. Мой код 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)