Blackrose's Blog Blackrose's Blog

crosstool-ng制做hg526的工具链失败

in technologyread (456) 文章转载请注明来源!

crosstool-ng的用法,google中有很多,我主要参考Tekkaman Ninja的文章。但在编译过程中,出现了很多问题,现将问题记于此。为了方便编译,我把所有的包都放在了src下面。

gcc-4.2.2.tar.bz2
glibc-ports-2.8.tar.bz2
mpfr-2.4.2.tar.bz2
glibc-2.8.tar.bz2
gmp-4.3.1.tar.bz2
binutils-2.19.tar.bz2
glibc-linuxthreads-2.8.tar.bz2
linux-2.6.27.45.tar.bz2

1.kernel中Makefile文件出现混杂错误
原因:
make版本过高,与低版本的makefile文件不兼容
解决方法:
将错误行前的"/"删除即可

2.gcc的错误
[ERROR] /tmp/crosstool-ng/targets/src/gcc-4.2.2/gcc/regrename.c:1646: error: 'IFCVT_ALLOW_MODIFY_TEST_IN_INSN' undeclared (first use in this function)
原因:1646至1688行是AVR平台用的
解决方法:
将1646至1688行注释掉

3.glibc的错误:
These critical programs are missing or too old: as ld
解决方法:
根据Tekkaman的方法,修改glibc的configure文件,将里面的version区域改大些即可。configure 脚本认为gcc-4.3.2版本太老(其实是因为当时gcc还没有这么高的版本,只要不是3.2到4.1之间的版本,都认为too old),不能编译。
而我的gcc是4.5.1的,所以改成

case $ac_prog_version in
4532     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;                                                               
4533     3.[2-9]*|4.[0-5]*)
4534        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;                                                         
4535     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
4536   
4537   esac

4.glibc-liuxthreads的错误:
linuxthreads需要自己来下载,并且将解出的目录重命名后打包。

5.glibc的manual错误:
make[3]: Entering directory `/sources/glibc-2.11.2/manual'
Makefile:235: *** mixed implicit and normal rules. Stop.
原因:make工具的版本问题
解决方法:
sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile

经过一天的编译和排错,终于在glibc面前倒下了,除了gcc和g++其他都编译出来了。估计是由于版本的问题,crosstool-ng并不能很好的工作,所以决定有空再手动编译吧。

PS:最近西安的电信DNS又抽网了,直接访问博客竟然无法解析了,f**k

参考文献:
http://blog.chinaunix.net/uid-20543672-id-94369.html
http://busybox.is-programmer.com/posts/24549.html
http://blog.csdn.net/jiayinjia1983116/article/details/7007347
http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94333

文章二维码

扫描二维码,在手机上阅读!

发表新评论
仅有 1 条评论
  1. 7hao
    7hao
    回复

    展开你妹。。。。

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆