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

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

问题描述

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

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.

将 Jnetpcap 编译为共享库时出现错误,因为我必须与 libpcap.a 链接,但我不知道如何告诉 Android.mk 他必须与我拥有的 libpcap.a 文件链接.

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.

使用LOCAL_STATIC_LIBRARIES:= libpcap"将不起作用,因为 libpcap 在 android NDK 中默认不提供.

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.

这是我当前的 Android.mk 文件:

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)

推荐答案

你必须将 pcap 构建为静态模块.像这样的

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)

此构建 pcap 作为本地模块,您可以与 LOCAL_STATIC_LIBRARIES 链接

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

只需添加

LOCAL_STATIC_LIBRARIES := pcap

打电话之前

include $(BUILD_SHARED_LIBRARY)

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

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