分类: LINUX
2014-04-11 16:21:31
编译过程中遇到一些问题,度娘到http://blog.csdn.net/cc96610536/article/details/8426015这个博客,帮助很大。原文是英文,有些地方表述方式不是很好,所以自己写一篇记录一下。
dhcp版本:dhcp-4.2.6
交叉工具链:mips-linux-uclibc-gcc
过程
1、进入到源码目录,按照常规的选项配置./configure CC=mips-linux-uclibc-gcc --host=mips-linux-uclibc --prefix=xxx,但是配置报错:
checking for library containing if_nametoindex... none required
checking for /dev/random... configure: error: cannot check for file existence when cross compiling
make: *** [dhcp_config] Error 1
2、根据链接中的提示修改配置流程,配置成功。
echo ac_cv_file__dev_random=yes > config.cache && ./configure -C CC=mips-linux-uclibc-gcc --host=mips-linux-uclibc --prefix=xxx
这里使用了-C参数,原文使用的--cache-file=config.cache,用./configure --help可看到-C、 --config-cache和--cache-file=config.cache都是一个作用。
3、开始编译,执行make但是报错了:
../bind/lib/libdns.a: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make[2]: *** [svtest] Error 1
make[2]: Leaving directory `/home/luoyingcai/macspy/a_dev/trunk/apps/dhcp/dhcp-4.2.6/omapip'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/luoyingcai/macspy/a_dev/trunk/apps/dhcp/dhcp-4.2.6'
make: *** [dhcp_build] Error 2
从经验看这里应该是工具链问题,要么是该用gcc的用成了mips-linux-uclibc-gcc,或者反之。原文有一个恰好是修改$(CC)的步骤:
1)修改bind/Makefile, 将下文中的./configure换成BUILD_CC=gcc ./configure --host=mips-linux-uclibc --with-randomdev=/dev/random
@if test -f ${bindsrcdir}/Makefile ; then \
echo Bind export libraries already configured ; \
else \
echo Configuring BIND Export libraries for DHCP. ; \
rm -rf ./lib ./include ./configure.log ./build.log ./install.log ; \
(cd ${bindsrcdir} && ./configure --disable-kqueue --disable-epoll --disable-devpoll --without-openssl --without-libxml2 --enable-exportlib --enable-threads=no --with-export-includedir=${binddir}/include --with-export-libdir=${binddir}/lib --with-gssapi=no > ${binddir}/configure.log); \
fi
2)修改bind/bind-9.7.1/lib/export/dns/Makefile.in,将下文中的$(CC)换成$(BUILD_CC),其实就是为了不要交叉编译gen.o
gen: ${srcdir}/gen.c
${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
3)重新make编译的时候发现还是报相同的错误,跟踪发现原来每次编译的时候都是将bind/bind.tar.gz解压出来,因此2)中的修改内容被覆盖了。所以必须完成第二步后将bind/bind-9.5.5目录重新打包成bind/bind.tar.gz覆盖掉原来的包。
4、make install安装,交叉编译完成。