一开始按照原子教程来一步一步编译发现一直报错,经过一晚上在网络上摸爬滚打,终于是解决问题了
修改Makefile
- 32行
CC = gcc
改成CC = 交叉编译器
,比如我的就是
CC = /usr/local/arm/gcc-linaro-4.9.4-2017.01-86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
- 44行
SUBDIRS = lib ip tc bridge misc netem genl tipc man
修改为SUBDIRS = lib ip
修改include/namespace.h
由于gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabi编译器的原因,函数setns声明有冲突,报错如下:
In file included from utils.c:36:0:
../include/namespace.h:35:19: error: static declaration of ‘setns’ follows non-static declaration
static inline int setns(int fd, int nstype)
^~~~~
In file included from /usr/arm/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/usr/include/sched.h:43:0,
from ../include/namespace.h:4,
from utils.c:36:
/usr/arm/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/usr/include/bits/sched.h:91:12: note: previous declaration of ‘setns’ was here
extern int setns (int __fd, int __nstype) __THROW;
用extern int setns (int __fd, int __nstype) __THROW;
代替include/namespace.h
中原先的setns函数,修改好如下:
#ifndef HAVE_SETNS
extern int setns (int __fd, int __nstype) __THROW;
/*
static inline int setns(int fd, int nstype)
{
...
}
*/
#endif /* HAVE_SETNS */
安装bison flex等工具
编译中可能会出现bison : command ont found
等报错,解决方法:
sudo apt-get install bison
sudo apt-get install flex