我使用的radvd版本为Version: 2.16 ,下载源码之后可以先看一下支持的配置./configure --help
,然后执行如下配置,主要是配置host参数和CC环境变量。
./configure --host=arm-brcm-linux-uclibcgnueabi CC=/projects/hnd/tools/linux/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/arm-brcm-linux-uclibcgnueabi-gcc
然后我就make,不出意料,编译不过。
编译device-common.c时,提示ifaddrs相关的结构体不对,于是手动添加ifaddrs.c和ifaddrs.h到源码目录,在device-common.c里加入#include "ifaddrs.h"
,然后修改makefile,把ifaddrs.c加入依赖。如下:
# 加上ifaddrs.oradvd_LDADD = \libradvd-parser.a \privsep-linux.o device-linux.o netlink.o ifaddrs.o# 加上ifaddr.cradvd_SOURCES = \defaults.h \includes.h \log.c \log.h \pathnames.h \radvd.h \recv.c \socket.c \util.c \device-common.c \interface.c \process.c \radvd.c \send.c \timer.cbb \ifaddrs.c# 加上ifaddrs.oradvd_DEPENDENCIES = \privsep-linux.o device-linux.o netlink.o \libradvd-parser.a ifaddrs.o# 这个下面加ifaddrs.Po这一行include test/$(DEPDIR)/check_all-print_safe_buffer.Poinclude ./$(DEPDIR)/ifaddrs.Po# 然后再在附近加下面几行check_all-ifaddrs.o: ifaddrs.c$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_all_CFLAGS) $(CFLAGS) -MT check_all-ifaddrs.o -MD -MP -MF $(DEPDIR)/check_all-ifaddrs.Tpo -c -o check_all-ifaddrs.o `test -f 'ifaddrs.c' || echo '$(srcdir)/'`ifaddrs.c$(AM_V_at)$(am__mv) $(DEPDIR)/check_all-ifaddrs.Tpo $(DEPDIR)/check_all-ifaddrs.Po# $(AM_V_CC)source='ifaddrs.c' object='check_all-ifaddrs.o' libtool=no \# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_all_CFLAGS) $(CFLAGS) -c -o check_all-ifaddrs.o `test -f 'ifaddrs.c' || echo '$(srcdir)/'`heck_all-ifaddrs.obj: ifaddrs.c$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_all_CFLAGS) $(CFLAGS) -MT check_all-ifaddrs.obj -MD -MP -MF $(DEPDIR)/check_all-ifaddrs.Tpo -c -o check_all-ifaddrs.obj `if test -f 'ifaddrs.c'; then $(CYGPATH_W) 'ifaddrs.c'; else $(CYGPATH_W) '$(srcdir)/ifaddrs.c'; fi`$(AM_V_at)$(am__mv) $(DEPDIR)/check_all-ifaddrs.Tpo $(DEPDIR)/check_all-ifaddrs.Po# $(AM_V_CC)source='ifaddrs.c' object='check_all-ifaddrs.obj' libtool=no \# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_all_CFLAGS) $(CFLAGS) -c -o check_all-ifaddrs.obj `if test -f 'ifaddrs.c'; then $(CYGPATH_W) 'ifaddrs.c'; else $(CYGPATH_W) '$(srcdir)/ifaddrs.c'; fi`
就这样。然后就可以编译通过了。