linux交叉编译报错,Linux交叉编译dhcp

编译过程中遇到一些问题,度娘到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安装,交叉编译完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值