我是做抓包的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源代码才能解决么?还是我编译的配置上还有问题。
解决方案 »
- Android SDK Manager更新
- 我是个大一的计算机菜鸟,现在有些迷茫。。。
- android如何将一个应用程序如何打成jar包以插件的形式供另一个应用程序调用??? 急需求解
- Android调用webservice里面的soaphead校验问题,解决方案有没有
- 导入与导出问题,请高手指点下小弟
- 请教VI里Cscope的问题
- 如何做出这样的弹出式菜单?
- WebView横竖切屏的问题
- android的assets下的数据,可否在已经打好包的情况下修改
- android studio 找不到荣耀9真机
- Android internal.Telephony 是属于哪个进程
- ubuntu11.04编译android2.3错误
/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的源代码?