Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
749 views
in Technique[技术] by (71.8m points)

linker - Android NDK: Link using a pre-compiled static library

I'm trying to port Jnetpcap to Android in order to use it for parsing .pcap files. Jnetpcap is a java wrapper for libpcap which uses JNI. I have compiled libpcap as a static library using the android's source code tree.

When compiling Jnetpcap as a shared library I'm getting errors because I have to link with libpcap.a but I don't know how could I tell Android.mk that he must link with the libpcap.a file that I have.

Using "LOCAL_STATIC_LIBRARIES:= libpcap" won't work because libpcap doesn't come by default in the android NDK.

If any of you guys could help me I would be very thankful.

Here is my current Android.mk file:

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)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Finally solved it. My Android.mk code:

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)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...