昨天尝试编译libpcap0.9.8和jnetpcap1.2成功了,今天想着能不能编译libpcap0.9.8和jnetpcap-1.3.0-1。
因为jnetpcap-1.3.0-1也支持libpcap的0.9.8版本。
libpcap0.9.8的源码下载参见前一篇文章:
http://aswang.iteye.com/blog/1036305
jnetpcap-1.3.0-1的下载地址:
http://jnetpcap.com/download
源码下载完毕之后,还是新建一个目录,把libpcap0.9.8 和jnetpcap-1.3.0-1的c源码放在一起,然后在该目录中新建Android.mk文件,内容如下:(当然javah命令还是需要执行,以便生成对应的头文件)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
bpf_dump.c\
bpf/net/bpf_filter.c\
bpf_image.c\
etherent.c\
fad-gifc.c\
gencode.c\
grammar.c\
inet.c\
nametoaddr.c\
optimize.c\
pcap.c\
pcap-linux.c\
savefile.c\
scanner.c\
version.c
LOCAL_CFLAGS:=-O2 -g
LOCAL_CFLAGS+=-DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCE
LOCAL_MODULE:= libpcap
include $(BUILD_STATIC_LIBRARY)
#LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
jnetpcap.cpp\
jnetpcap_beta.cpp\
jnetpcap_bpf.cpp\
jnetpcap_dumper.cpp\
jnetpcap_ids.cpp\
jnetpcap_pcap_header.cpp\
jnetpcap_utils.cpp\
nio_jbuffer.cpp\
nio_jmemory.cpp\
nio_jnumber.cpp\
packet_flow.cpp\
packet_jheader.cpp\
packet_jheader_scanner.cpp\
packet_jpacket.cpp\
packet_jscan.cpp\
packet_jsmall_scanner.cpp\
packet_protocol.cpp\
util_checksum.cpp\
util_debug.cpp\
util_in_cksum.cpp\
winpcap_ext.cpp\
winpcap_ids.cpp\
winpcap_send_queue.cpp\
winpcap_stat_ex.cpp
LOCAL_MODULE:= libjnetpcap
LOCAL_STATIC_LIBRARIES := libpcap
include $(BUILD_SHARED_LIBRARY)
然后进行ndk-build编译,编译报错:
说未定义的引用:crc16_ccitt_seed 等
结果找到对应的头文件了:
util_crc16.h 、util_crc32.h
但是没有发现对应的.c文件,于是上网搜索,看看这两个头文件是不是已经在某个库里面实现了,结果没发现有哪个c函数库包含这两个文件,为这个问题纠结了很长时间,最后想是不是下载的包里面没有包含这两个头文件的c源文件,于是想着从svn库里面checkout出来看看,于是到jnetpcap官网上去看文档了,结果还让我找到了svn的地址:
svn co https://jnetpcap.svn.sourceforge.net/svnroot/jnetpcap/jnetpcap/trunk jnetpcap
(网址:http://jnetpcap.com/node/329),索性就把源码全部下载了,结果还真找到了util_crc32.c和util_crc16.c文件。
文件找到了,问题怎么解决?直接修改Android.mk文件,在jnetpcap模块的LOCAL_SRC_FILES:=\下面加上这两个c文件:
LOCAL_SRC_FILES:=\
util_crc16.c\
util_crc32.c\
jnetpcap.cpp\
......
然后,继续编译,成功!
虽然成功了,但是后来在android上测试的时候,发现没法使用,因为jnetpcap里面使用了在android里面不支持的java.awt.Image类,虽然找到一些解决办法(例如使用兼容性的java.awt.Image库),但是想想也没必要使用最新版本的,之前的jnetpcap1.2工作的蛮好的,那就继续使用吧。这从编译权当做练习了!
分享到:
相关推荐
在libpcap-0.9.8版本中,包含了丰富的函数和结构体,如`pcap_open_live()`用于打开一个网络接口进行实时捕获,`pcap_compile()`用于编译过滤表达式,以及`pcap_loop()`和`pcap_next()`用于循环处理捕获到的数据包。...
在Ubuntu 20.04系统中,libpcap-dev是一个重要的软件开发包,它提供了对数据包捕获和分析的库支持。libpcap是一个跨平台的库,被广泛用于网络安全、网络监控以及数据分析等领域。如果你正在无网络环境下工作,并且...
libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm libpcap-devel-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm
本文将详述libpcap-1.9.1版本在Linux环境下的应用和编译过程,旨在帮助读者深入理解其核心功能和使用技巧。 libpcap的核心功能主要体现在以下几个方面: 1. **数据包捕获**:libpcap能够实时捕获网络接口上的...
libpcap-devel-1.5.3-11.el7.x86_64.rpm 下载不到正确包的同志自取,不能零积分下载最少只能1积分请见谅
Centos 7.x tcpdump 离线安装所需的软件(libpcap-1.5.3-12.el7.x86_64.rpm).
libpcap-devel-1.3.0-2.4.1.x86_64.rpm
libpcap-1.10.1是libpcap的一个稳定版本,包含了多项改进和修复。这些更新可能包括增强的性能、新的API功能、错误修复以及对新硬件或协议的支持。 **三、源码安装步骤** 1. **环境准备**:确保系统已经安装了必要...
libpcap-devel-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm
在linux下使用的libpcap-devel-1.0.0-6.20091201git117cb5.el6.x86_64.rpm
libpcap-devel-0.9.4-14.el5.x86_64.rpm,安装iftop64位系统时所需的依赖包
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
* 交叉编译:是一种编译技术,允许在一个平台上编译的代码在另一个平台上运行。 * libpcap:是一个流行的网络嗅探器库,提供了一个跨平台的接口来捕获和分析网络流量。 * Makefile:是一个编译控制文件,用于指定...
64位RM包 libpcap-0.9.4-15.el5.x86_64
libpcap-1.4.0.tar.gz是一个压缩包文件,包含了libpcap的1.4.0版本源代码,供用户编译和安装到他们的系统中。 libpcap的核心功能主要体现在以下几个方面: 1. **数据包捕获**:libpcap库提供了一套API(应用程序...
在这个场景中,`libpcap-1.1.1.tar`是一个未压缩的tar文件,它包含了源代码、头文件、文档和其他构建libpcap所需的资源。使用`tar -xvf`命令可以将其解压到当前目录,方便后续的编译和安装。 总的来说,libpcap是一...
jpm
适用Centos7/89的libpcap、libpcap-devel离线安装包rpm,适用于Linux (Fedora/RHEL/CentOS)对应版本的系统