Ошибки статического связывания libpcap (неопределенная ссылка на API pcap) в Android NDK-build

Я пытаюсь запустить приложение packetpammer на планшете Android nexus-7 wifi only (кодовое название: grouper). Я скачал библиотеку libpcap и смог создать статическую библиотеку (libpcap.a). Тем не менее, когда я пытаюсь построить приложение пакетной рассылки с использованием NDK-build, я продолжаю получать ошибки компоновщика.

Моя структура папок выглядит так:

packetspammer
|
jni
  |
  packetspammer source files
  Android.mk file that links in libpcap and builds the packetspammer binary
  <Directory>platform_external_libpcap 
       |
       libpcap.a file

Вот мой файл android.mk:

#Links the libpcap library
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := platform_external_libpcap/libpcap
LOCAL_SRC_FILES := platform_external_libpcap/libpcap.a
LOCAL_EXPORT_C_INCLUDES := platform_external_libpcap
include $(PREBUILT_STATIC_LIBRARY)

#Builds packetspammer app
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)

LOCAL_MODULE    := packetspammer
LOCAL_SRC_FILES := radiotap.c packetspammer.c 
LOCAL_STATIC_LIBRARIES  := platform_external_libpcap/libpcap.a
LOCAL_C_INCLUDES := ~/android/android-ndk-r10b/platforms/android-L/arch-arm/usr/include \
                ~/packetspammer/jni/platform_external_libpcap

TARGET_ARCH     := arm

include $(BUILD_SHARED_LIBRARY)

Это сообщения об ошибках, которые я получаю:

error: undefined reference to 'pcap_open_live'
error: undefined reference to 'pcap_datalink'
error: undefined reference to 'pcap_compile'
error: undefined reference to 'pcap_geterr'
error: undefined reference to 'pcap_setfilter'
error: undefined reference to 'pcap_geterr'
error: undefined reference to 'pcap_freecode'
error: undefined reference to 'pcap_setnonblock'
error: undefined reference to 'pcap_next_ex'
error: undefined reference to 'pcap_inject'

Подскажите, что не так с файлом Android.mk или с процессом, которому я следую. Я посмотрел руководство для программиста NDK и следовал за разделом "Сборка / Автономный набор инструментов", а также "Сборка /Android.mk". Я получаю ту же ошибку компоновщика даже с отдельным набором инструментов.

Я нашел много постов, которые помогли мне решить некоторые из моих ошибок, прежде чем я застрял здесь. Вот ссылки на них:

неопределенная ошибка ссылки при статическом связывании;

связывание сторонних библиотек;

проблема связывания статических библиотек;

использование предварительно скомпилированной статической библиотеки;

libpcap для Android;

скомпилировать libpcap с помощью Android ndk

портирование JNetPcap

1 ответ

Решение

Я смог решить проблему. Я следовал принятому ответу в этом вопросе SO (скомпилировать libpcap с помощью android ndk) и загрузил libpcap с этого сайта.

Я скомпилировал и собрал статическую библиотеку libpcap.a, связал ее в файле packagespammer android.mk и получил окончательный исполняемый файл.

Другие вопросы по тегам