Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25116
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-11 16:36
个人简介

- -

文章分类
文章存档

2015年(3)

我的朋友

分类: LINUX

2015-05-26 10:24:10

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上的中文显示为乱码的问题还没有解决,再接再厉吧!

阅读(2708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~