安卓 NDK : Link using a pre-compiled static library

标签 android linker android-ndk static-libraries

我正在尝试将 Jnetpcap 移植到 Android,以便使用它来解析 .pcap 文件。 Jnetpcap 是一个使用 JNI 的 libpcap 的 java 包装器。我已经使用 android 的源代码树将 libpcap 编译为静态库。

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

最佳答案

终于解决了。我的 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)

关于安卓 NDK : Link using a pre-compiled static library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463518/

相关文章:

linux - 使用调试符号从源代码编译 glibc

c++ - 适用于 Android 的 FreeType2 交叉编译

android - 如何从命令行使用 cmake 为已 root 的 Android 设备生成可执行文件?

android - fragment 中的无尽 ListView

java - 错误 : [Dagger/MissingBinding] [dagger. android.AndroidInjector.inject(T)] Dagger

ios - XCode 4.2 Lion(iOS 产品)中与 Objective-C++/C++ 的链接错误

c - 如何在 Android Studio 上为 native C 代码调试 Fatal Signal 6 崩溃?

Android 6.0 权限对话框未显示

java - 这是如何安排 java 方法在 1 秒后运行?

xcode4 - Xcode 自定义构建配置导致静态库出现 "library/file not found"