主要是记录交叉编译的一个坑,不知道为什么网上的教程都没遇到过。
环境
- libpcap 1.10.4
- tcpdump 4.99.4
- WSL
编译步骤
注意事项
- 注意解压的时候文件夹名需要是libpcap-1.10.4,由于我是在github直接下载zip的压缩包名是libpcap-libpcap-1.10.4.tar.gz解压后libpcap-libpcap-1.10.4,编译tcpdump时会出现问题找不到libpcap
- libpcap-1.10.4和tcpdump-4.99.4需要放在同一级目录下
1.编译libpcap
- tar zxvf libpcap-1.10.4.tar.gz
- cd libpcap-1.10.4
- ./configure --prefix=$PWD/install --host=arm CC=/opt/gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
- make
- make install
2.编译tcpdump(默认是静态链接)
-
tar zxvf tcpdump-4.99.4.tar.gz
-
cd tcpdump-4.99.4.tar.gz
-
./configure --prefix=$PWD/install --host=arm CC=/opt/gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
-
make 可能会提示错误如下:
/opt/gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -DHAVE_CONFIG_H -I. -I.../libpcap-1.10.4 -g -O2 -c ./tcpdump.c
In file included from /opt/gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/string.h:634:0,
from ./tcpdump.c:117:
./netdissect.h:133:14: error: expected identifier or '(' before 'extension '
extern char *strdup (const char *str);
^
./netdissect.h:137:14: error: expected identifier or '(' before 'extension '
extern char *strsep(char **, const char *);
那就去修改Makefile的INCLS
makefileINCLS = -I. -I../libpcap-1.10.4/install/include
-
make install