Android的NDK:链接使用pre-编译静态库 [英] Android NDK: Link using a pre-compiled static library

查看:252
本文介绍了Android的NDK:链接使用pre-编译静态库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图端口Jnetpcap到Android为了用它来解析.pcap文件。 Jnetpcap是一个Java包装libpcap的,它使用JNI。我已经使用了Android的源$ C ​​$ C树编译libpcap的是一个静态库。

在编译Jnetpcap作为共享库我收到错误,因为我有libpcap.a链接,但我不知道我怎么能告诉Android.mk,他必须与我有libpcap.a文件链接

使用LOCAL_STATIC_LIBRARIES:= libpcap的,将无法正常工作,因为libpcap的不来默认情况下,在Android NDK

如果任何你们的可以帮助我,我将非常感激。

下面是我当前的Andr​​oid.mk文件:

 包括/home/sergio/workspace/MyApp/jni/libpcap/Android.mk

LOCAL_PATH:= $(叫我-DIR)
包括$(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:= /家庭/塞尔吉奥/ Android的NDK-R5B /平台/ Android为8 /弓臂/ usr / include目录的/ home /塞尔吉奥/工作区/鲨鱼/ JNI / libpcap的

LOCAL_STATIC_LIBRARIES:= libpcap的

包括$(BUILD_SHARED_LIBRARY)
 

解决方案

您必须建立PCAP为静态模块。事情是这样的。

 包括$(CLEAR_VARS)
LOCAL_MODULE:= PCAP
LOCAL_CFLAGS:= declare_flags
LOCAL_C_INCLUDES:= declare_include
LOCAL_SRC_FILES:= src_files
包括$(BUILD_STATIC_LIBRARY)
 

该版本PCAP当地的模块,你可以用LOCAL_STATIC_LIBRARIES链接

只是添加

  LOCAL_STATIC_LIBRARIES:= PCAP
 

在调用之前

 包括$(BUILD_SHARED_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)

解决方案

You have to build pcap as static module. Something like this

include $(CLEAR_VARS)
LOCAL_MODULE := pcap
LOCAL_CFLAGS := declare_flags
LOCAL_C_INCLUDES := declare_include
LOCAL_SRC_FILES := src_files
include $(BUILD_STATIC_LIBRARY)

This build pcap as local module which you could link with LOCAL_STATIC_LIBRARIES

just add

LOCAL_STATIC_LIBRARIES := pcap

before calling

include $(BUILD_SHARED_LIBRARY)

这篇关于Android的NDK:链接使用pre-编译静态库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆