我是做抓包的android网络抓包分析的。一直有这个编译错误,纠结了N久,始终没有解决,各位大侠帮帮忙啊。
我在android的官网,下到了适合android的libpcap源代码,然后将源代码放到项目文件夹下,用ndk编译,顶层使用的jpcap。将libpcap编译为静态库libpcap.a,将jpcap编译为动态库jpcap.os。将源代码全部放到了jni目录下,头文件引用问题已经解决了一部分。Android.mk文件如下: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.cLOCAL_CFLAGS:=-O2 -g
LOCAL_CFLAGS+=-DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCELOCAL_MODULE:= libpcapinclude $(BUILD_STATIC_LIBRARY)include $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libpcapLOCAL_SRC_FILES:=\
packet_arp.c \
JpcapCaptor.c \
JpcapSender.c \
JpcapWriter.c \
packet_datalink.c \
packet_icmp.c \
packet_ip.c \
packet_ipv6.c \
packet_tcp.c \
packet_udp.c LOCAL_MODULE := jpcapinclude $(BUILD_SHARED_LIBRARY)jpcap.so使用libpcap.a中的函数。用ndk生成libpcap.a的时候报错:wxb@wxb-laptop:~/netFlux$ ndk-build -C jni -B
make: Entering directory `/home/wxb/netFlux/jni'
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_arp.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/JpcapCaptor.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/JpcapSender.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/JpcapWriter.c
/home/wxb/netFlux/jni/JpcapWriter.c: In function 'Java_jpcap_JpcapWriter_close':
/home/wxb/netFlux/jni/JpcapWriter.c:47: warning: incompatible implicit declaration of built-in function 'free'
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_datalink.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_icmp.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_ip.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_ipv6.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_tcp.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_udp.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/bpf_dump.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/bpf/net/bpf_filter.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/bpf_image.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/etherent.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/fad-gifc.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/gencode.c
yacc /home/wxb/netFlux/jni/grammar.y
mv -f y.tab.c /home/wxb/netFlux/jni/grammar.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/grammar.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/inet.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/nametoaddr.c
In file included from /home/wxb/download/android-ndk-r4/build/platforms/android-3/arch-arm/usr/include/netinet/ether.h:28,
from /home/wxb/netFlux/jni/nametoaddr.c:67:
/home/wxb/download/android-ndk-r4/build/platforms/android-3/arch-arm/usr/include/net/if_ether.h:47:1: warning: "ETHER_ADDR_LEN" redefined
In file included from /home/wxb/netFlux/jni/nametoaddr.c:64:
/home/wxb/download/android-ndk-r4/build/platforms/android-3/arch-arm/usr/include/netinet/if_ether.h:31:1: warning: this is the location of the previous definition
Compile thumb : pcap <= /home/wxb/netFlux/jni/optimize.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/pcap.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/pcap-linux.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/savefile.c
lex -t /home/wxb/netFlux/jni/scanner.l > /home/wxb/netFlux/jni/scanner.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/scanner.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/version.c
StaticLibrary : libpcap.a
SharedLibrary : libjpcap.so
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(nametoaddr.o): In function `pcap_ether_hostton':
/home/wxb/netFlux/jni/nametoaddr.c:479: undefined reference to `ether_hostton'
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(scanner.o): In function `yylex':
/home/wxb/netFlux/jni/scanner.l:336: undefined reference to `pcap_lval'
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(scanner.o): In function `yy_get_next_buffer':
/home/wxb/netFlux/jni/<stdout>:3739: undefined reference to `pcap_lval'
collect2: ld returned 1 exit status
make: *** [/home/wxb/netFlux/bin/ndk/local/armeabi/libjpcap.so] Error 1
make: Leaving directory `/home/wxb/netFlux/jni'
应该如何编译的?需要编译整个android源代码才能解决么?还是我编译的配置上还有问题。
我在android的官网,下到了适合android的libpcap源代码,然后将源代码放到项目文件夹下,用ndk编译,顶层使用的jpcap。将libpcap编译为静态库libpcap.a,将jpcap编译为动态库jpcap.os。将源代码全部放到了jni目录下,头文件引用问题已经解决了一部分。Android.mk文件如下: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.cLOCAL_CFLAGS:=-O2 -g
LOCAL_CFLAGS+=-DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCELOCAL_MODULE:= libpcapinclude $(BUILD_STATIC_LIBRARY)include $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libpcapLOCAL_SRC_FILES:=\
packet_arp.c \
JpcapCaptor.c \
JpcapSender.c \
JpcapWriter.c \
packet_datalink.c \
packet_icmp.c \
packet_ip.c \
packet_ipv6.c \
packet_tcp.c \
packet_udp.c LOCAL_MODULE := jpcapinclude $(BUILD_SHARED_LIBRARY)jpcap.so使用libpcap.a中的函数。用ndk生成libpcap.a的时候报错:wxb@wxb-laptop:~/netFlux$ ndk-build -C jni -B
make: Entering directory `/home/wxb/netFlux/jni'
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_arp.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/JpcapCaptor.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/JpcapSender.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/JpcapWriter.c
/home/wxb/netFlux/jni/JpcapWriter.c: In function 'Java_jpcap_JpcapWriter_close':
/home/wxb/netFlux/jni/JpcapWriter.c:47: warning: incompatible implicit declaration of built-in function 'free'
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_datalink.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_icmp.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_ip.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_ipv6.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_tcp.c
Compile thumb : jpcap <= /home/wxb/netFlux/jni/packet_udp.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/bpf_dump.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/bpf/net/bpf_filter.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/bpf_image.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/etherent.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/fad-gifc.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/gencode.c
yacc /home/wxb/netFlux/jni/grammar.y
mv -f y.tab.c /home/wxb/netFlux/jni/grammar.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/grammar.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/inet.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/nametoaddr.c
In file included from /home/wxb/download/android-ndk-r4/build/platforms/android-3/arch-arm/usr/include/netinet/ether.h:28,
from /home/wxb/netFlux/jni/nametoaddr.c:67:
/home/wxb/download/android-ndk-r4/build/platforms/android-3/arch-arm/usr/include/net/if_ether.h:47:1: warning: "ETHER_ADDR_LEN" redefined
In file included from /home/wxb/netFlux/jni/nametoaddr.c:64:
/home/wxb/download/android-ndk-r4/build/platforms/android-3/arch-arm/usr/include/netinet/if_ether.h:31:1: warning: this is the location of the previous definition
Compile thumb : pcap <= /home/wxb/netFlux/jni/optimize.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/pcap.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/pcap-linux.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/savefile.c
lex -t /home/wxb/netFlux/jni/scanner.l > /home/wxb/netFlux/jni/scanner.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/scanner.c
Compile thumb : pcap <= /home/wxb/netFlux/jni/version.c
StaticLibrary : libpcap.a
SharedLibrary : libjpcap.so
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(nametoaddr.o): In function `pcap_ether_hostton':
/home/wxb/netFlux/jni/nametoaddr.c:479: undefined reference to `ether_hostton'
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(scanner.o): In function `yylex':
/home/wxb/netFlux/jni/scanner.l:336: undefined reference to `pcap_lval'
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(scanner.o): In function `yy_get_next_buffer':
/home/wxb/netFlux/jni/<stdout>:3739: undefined reference to `pcap_lval'
collect2: ld returned 1 exit status
make: *** [/home/wxb/netFlux/bin/ndk/local/armeabi/libjpcap.so] Error 1
make: Leaving directory `/home/wxb/netFlux/jni'
应该如何编译的?需要编译整个android源代码才能解决么?还是我编译的配置上还有问题。
/home/wxb/netFlux/jni/nametoaddr.c:479: undefined reference to `ether_hostton'
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(scanner.o): In function `yylex':
/home/wxb/netFlux/jni/scanner.l:336: undefined reference to `pcap_lval'
/home/wxb/netFlux/bin/ndk/local/armeabi/libpcap.a(scanner.o): In function `yy_get_next_buffer':
/home/wxb/netFlux/jni/<stdout>:3739: undefined reference to `pcap_lval'
collect2: ld returned 1 exit status看log,libpcap已经没有编过了,似乎有依赖的文件没有加进来。将这个放到android的source code环境下去编译,因为source code在编译libpcap时,引用了别的文件。
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.cLOCAL_CFLAGS:=-O2 -g
LOCAL_CFLAGS+=-DHAVE_CONFIG_H -D_U_="__attribute__((unused))" -Dlinux -D__GLIBC__ -D_GNU_SOURCELOCAL_MODULE:= libpcapinclude $(BUILD_STATIC_LIBRARY)是android官方的libpcap库,里边只有源文件的编译,没有对其他库文件的依赖,难道需要完全编译Android源代码?
有没有人完全编译过Android的源代码?