分类: LINUX
2015-05-26 10:24:10
原文地址:libpcap向嵌入式linux的移植过程(转) 作者:理工小朱
1.建立编译环境,具体方法如《嵌入式开发学习笔记--建立编译环境》一文。
2. 解压libpcap-1.0.0.tar.gz,cd进入目录,修改confiugre文件,把下面两段注释掉 #if test -z "$with_pcap" && test "$cross_compiling" = yes; then # { { echo "$as_me:$LINENO: error: pcap type not determined when cross-compiling; use --with-pcap=..." >&5 #echo "$as_me: error: pcap type not determined when cross-compiling; use --with-pcap=..." >&2;} # { (exit 1); exit 1; }; } #fi ....... # if test $ac_cv_linux_vers = unknown ; then # { { echo "$as_me:$LINENO: error: cannot determine linux version when cross-compiling" >&5 #echo "$as_me: error: cannot determine linux version when cross-compiling" >&2;} # { (exit 1); exit 1; }; } # fi 3. 执行./configure --host=arm-linux,这样就会使用arm-linux-gcc进行configure,生成Makefile 4. 修改Makefile的prefix项为prefix=/usr/local/arm/3.4.1/arm-linux,同时注意查看Makefile中的CC项,已经为arm-linux-gcc了,呵呵。 5. 接下来make,make install,完成了libpcap的编译和安装,查看/usr/local/arm/3.4.1/arm-linux/include,该目录下增加了三个pcap的文件库。 make时,会出现几个问题,一般就是缺少头文件,记得好像有个问题是一个结构体没有定义,直接在软件包中找到定义了该结构体的头文件,加到代码开头即可,还有一个问题是一个机构体内的一个成员缺少定义pcap-linux.c:error: structure has no member named `rg'。这个问题直接加一个宏说明
#ifdef DO_RING
if (!handle->rg.ct && (handle->rg.statbits || handle->rg.timeout || handle->rg.statperiod)) { fprintf (stderr, "WARNING: Packet statistics unavailable, frame count is zero.\n"); } #endif,这样make 即可完成,make install没有出现错误。 6.接着就可以编写你的抓包程序了。记得在用arm-linux-gcc编译时加上“-lpcap”选项。 ---------------------------------------------------编译的时候注意在后面添加生成的库的路径和include文件的路径,否则无法编译通过, arm-linux-gcc -o test1 -static test1.c -lpcap -L/usr/local/arm/3.4.1/arm-linux/lib -I/usr/local/arm/3.4.1/arm-linux/include 当然编译的时候还是会出现一个这样的问题 /usr/local/arm/3.4.1/arm-linux/lib/libpcap.a(pcap-linux.o)(.text+0xad8): In function `pcap_open_live': /home/zhu/FriendlyARM/libpcap-1.0_arm/pcap-linux.c:513: undefined reference to `pcap_convert_proto' collect2: ld returned 1 exit status 这个问题是该函数没有定义,可以在源码包中找到该函数的定义,将其复制到pcap-linux.c文件即可。 第一次编译的时候不知道哪一步出了问题,最后编译程序的时候总是提示出错:undefined reference to `pcap_parse',最后将arm-linux-gcc和libpcap全部重新装了一次就好了。现在可以在YC2440开发板上抓包了,呵呵,算是达到第一个小目标吧。只是utu-linux上的中文显示为乱码的问题还没有解决,再接再厉吧! |