我是做抓包的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源代码才能解决么?还是我编译的配置上还有问题。

解决方案 »

  1.   

    android上做不了这个,依赖库太多
      

  2.   

    /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看log,libpcap已经没有编过了,似乎有依赖的文件没有加进来。将这个放到android的source code环境下去编译,因为source code在编译libpcap时,引用了别的文件。
      

  3.   

    我一般都用makefile,这个放进去要多久才能编出来?
      

  4.   

    2楼说得貌似有道理,我也是这么怀疑的。但是我的Andoird.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)是android官方的libpcap库,里边只有源文件的编译,没有对其他库文件的依赖,难道需要完全编译Android源代码?
    有没有人完全编译过Android的源代码?