下载源码
tcpdump依赖于libpcap,所以需要先下载这两个的源代码;
编译libpcap
bash
$ cd libpcap-libpcap-1.10.6/
$ mkdir build
$ cd build/
$ ../configure --host=aarch64-openwrt-linux CC=aarch64-openwrt-linux-gcc --prefix=$PWD/install --without-libnl
$ make && make install
编译tcpdump
bash
$ cd tcpdump-tcpdump-4.99.6/
$ mkdir build
$ cd build/
$ ln -s ../../libpcap-libpcap-1.10.6/build/install/ libpcap #将前面编译生成的libpcap相关文件挂载到当前目录
$ ../configure --host=aarch64-openwrt-linux CC=aarch64-openwrt-linux-gcc CFLAGS="-I./libpcap/include/ -L./libpcap/lib/" --without-crypto
$ make
使用
将tcpdump与libpcap.so.1.10.6放到bin目录
bash
$ chmod +x tcpdump
$ ln -s libpcap.so.1.10.6 libpcap.so.1
$ tcpdump -h #测试
问题解决
libpcap问题
现象
bash
aarch64-openwrt-linux-musl/bin/ld: cannot find -lnl-3
原因:没有libnl库
解决:libnl 是可选依赖,用于高级接口管理(非必需)。去除libnl 依赖,增加--without-libnl
bash
../configure --host=aarch64-openwrt-linux CC=aarch64-openwrt-linux-gcc --prefix=$PWD/install --without-libnl
tcpdump问题
现象
bash
fatal error: openssl/opensslconf.h: No such file or directory
# include <openssl/opensslconf.h>
原因:交叉工具链的 OpenSSL 不完整
解决:如果不需要使用加密的一些高级特性,可以直接禁用 OpenSSL。 增加--without-crypto
bash
../configure --host=arm-linux CC=aarch64-linux-gnu-gcc CFLAGS="-I./libpcap/include/ -L./libpcap/lib/" --without-crypto
