Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28289
  • 博文数量: 5
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 49
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-02 23:06
文章分类
文章存档

2014年(2)

2013年(3)

我的朋友

分类: 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安装,交叉编译完成。



阅读(3738) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~