LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2575|回复: 8

"6.10 再次调整工具链"中的检查出错,希望大家帮忙看看哪里有问题!(

[复制链接]
发表于 2007-4-6 20:47:17 | 显示全部楼层 |阅读模式
我是参照LFS-6.2中文版的手册一路做下来的,没出什么问题!但到了“6.10 再次调整工具链”中的检查就出问题了,echo 'main(){}' >dummy.c生成dummy.c后!运行cc dummy.c是出错,提示/tools/lib/gcc/i686-pc-linux-gnu/4.0.3/../../../../i686-pc-linux-gnu/bin/ld:cannot find -lgcc_s   collect2: ld returoned 1 exit status!
我回头仔细的检查之前的各个步骤都没问题,手册中提到的容易出错的specs文件也没事!最后查到了2处错误:一是6.9 Glibc-2.3.6中配置Glibc时,建立/etc/nsswitch.conf文件中的
hosts: files dns时,写成hosts: files,忘了后面的dns;另一处就是
“6.6. 创建必需的文件与符号连接”时,建立/etc/group文件时,把里面的tty:x:4:写成了ttv:x:4:。修正了这2个错误后,reboot系统并按“制作LFS过程中各个阶段恢复工作状态的方法”这篇文章中提到的“6.9 Linux-Libc-Headers-2.6.11.2~6.37 Bash-3.0”阶段的方法恢复工作状态!但问题还是存在!我实在想不出什么其他的原因,所以希望大家帮帮忙,看看哪里会有问题!还有,我想问一下,就是在LFS的过程中,一旦发现之前的某一步骤出错了,一般应该怎么办?能不能直接reboot,然后恢复到出错步骤那个阶段的工作状态,然后重新安装,是否要先删掉安装出错的软件包!希望大家能帮帮忙,这里先谢谢大家了,在这里我学到了很多东西:)
 楼主| 发表于 2007-4-7 02:14:17 | 显示全部楼层
我看了一下其他帖子,发现不少人和我一样,遇到这样的问题!不过,好象都没有得到什么具体的解决方法!除了hans_yu大侠有提到可能是“5.12. Binutils-2.16.1 - 第二遍”中make -C ld LIB_PATH=/usr/lib:/lib没处理好引起的!无奈!重新开始LFS,这次很仔细的处理,没有任何出错提示(不知道这样算不算处理好通过了呢)!但到了6.10还是存在问题!

无语~~~~~~~~~~真希望哪位高人出来解惑释疑一下!

好象还有人说是版本的事,我是按6.2手册里说的版本,也是liveCD x86-6.2.4上的软件包!
分别是Binutils-2.16.1  GCC-4.0.3 Glibc-2.3.6,大家看看是怎么回事,帮忙解决一下这个问题,好让后面的“疑惑者”们有个参考!在这里再次谢过了
回复 支持 反对

使用道具 举报

发表于 2007-4-7 15:31:57 | 显示全部楼层
你是不是打错补丁了。。。有一个是针对这个的补丁 lgcc_s 的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-7 21:41:34 | 显示全部楼层
我是严格按照LFS-6.2手册做的,补丁也是按手册中提到的去打的,分别是:
“5.9. Expect-5.43.0”中的patch -Np1 -i ../expect-5.43.0-spawn-1.patch
“5.11. GCC-4.0.3 - 第二遍”中的patch -Np1 -i ../gcc-4.0.3-specs-1.patch
“5.14. Bash-3.1”中的patch -Np1 -i ../bash-3.1-fixes-8.patch
“5.26. Perl-5.8.8”中的patch -Np1 -i ../perl-5.8.8-libc-2.patch
“5.28. Tar-1.15.1”中的patch -Np1 -i ../tar-1.15.1-gcc4_fix_tests-1.patch
"6.7. Linux-Libc-Headers-2.6.12.0"中的patch -Np1 -i ../linux-libc-headers-2.6.12.0-inotify-3.patch
最后是“6.9. Glibc-2.3.6”中的patch -Np1 -i ../glibc-2.3.6-linux_types-1.patch和patch -Np1 -i ../glibc-2.3.6-inotify-1.patch!
下午又重头做了一次,这次也很小心,每一个细节都确认通过,“5.12. Binutils-2.16.1 - 第二遍”中的make -C ld LIB_PATH=/usr/lib:/lib也确认无误,最后的glibc的make -k check也没有任何error,不过失望的是,问题照样存在!真是无语!现在就剩下换版本的方法没试了!
还有,我想问一下, 手册中提到对于新手第5章里的make check可以跳过,所以我直接跳过第5章里的那些测试,不知道这会不会可能是引起这个问题的原因?make check是怎么样的一个作用,它只是告诉我们软件包有错误,我们自己去修复,还是说它发现错误的同时,也会去修复错误呢?
回复 支持 反对

使用道具 举报

发表于 2007-4-8 06:40:18 | 显示全部楼层
我不知道为什么会有这样的问题,如果有可能,贴一下 dummy.log 的内容
回复 支持 反对

使用道具 举报

发表于 2007-4-8 11:10:30 | 显示全部楼层
我也失败了一次。第二次成功了,为了消除打错字的影响 很多长命令我看明白是啥意思了 就直接粘贴上去的 ;)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-8 15:47:30 | 显示全部楼层
晨想版主,不好意思,浪费你时间了!问题已经解决了!的确如hans_yu大侠所说的,是“5.12. Binutils-2.16.1 - 第二遍”中make -C ld LIB_PATH=/usr/lib:/lib出问题了!我是先把手册手抄下来,然后再手工打命令的!命令没打错,是手抄错了,把
make -C ld LIB_PATH=/usr/lib:/lib抄成make -C ld LIB_PATH=/usr/bin:/lib了,所以才会出现这种情况!
对于这个问题,我总结了一下,在这里我想说一点个人的小想法,好让其他象我一样的初学者在遇到这种情况时,有个参照,不要一片茫然:
在整个LFS过程中,binutils软件包一共编译了3次,分别是:“5.3. Binutils-2.16.1 - 第一遍”“5.12. Binutils-2.16.1 - 第二遍”“6.11. Binutils-2.16.1”!最后一次,即6.11是最终LFS系统的组成部分,我们可以只当它和其他软件包一样去安装!而前两次则是临时工具链里的组成部分,一旦编译出错,将影响后面的操作无法继续下去!在我看来,binutils的前两次编译安装分别对应于2次调整工具链!
就象“5.3. Binutils-2.16.1 - 第一遍”中的
make -C ld clean
make -C ld LIB_PATH=/tools/lib
cp -v ld/ld-new /tools/bin
是为后面"调整工具链"步骤准备连接器!
而“5.12. Binutils-2.16.1 - 第二遍”中的
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
是为第六章的"再次调整工具链"阶段配置连接器!
事实上,我们在编译安装完binutils后,先不rm掉"binutils-2.16.1"和"binutils-build"这2个目录,在这个前提下,我们完全可以将
make -C ld clean
make -C ld LIB_PATH=/tools/lib
cp -v ld/ld-new /tools/bin
这3个命令放到“5.7. 调整工具链”这里来执行,对应的
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
这3个命令放到“6.10. 再次调整工具链”这里来执行,即在执行“6.10. 再次调整工具链”里的mv -v /tools/bin/{ld,ld-old}之前,先cd /sources/binutils-build后,
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
最后才mv -v /tools/bin/{ld,ld-old}!这样才使命令看起来象一个“整体”,完成一个步骤!这样一来,对于那些对系统,对LFS命令的含义,作用还不是很理解的新手们来说,能一目了然的知道那3句命令是干什么的,一旦出错了,也能“就近”的检查到出错的地方!

而6.2手册中将这3句命令分开,放到相距很远的章节中去执行,同样是出于对新手的照顾,使操作统一,即tar一个软件包后,编译安装完后就可以rm掉,以防后面要编译到同一软件包时因没删除之前编译过的源码目录而出错!

但我想说的是,将原本一体的命令分开执行,对于新手的我们来说,事实上是增加了理解命令含义,用途的难度,而且查错时也难了很多!最简单的例子:就象我一样“5.12. Binutils-2.16.1 - 第二遍”中的make -C ld LIB_PATH=/usr/lib:/lib出错了,但不会有什么提示,且这句命令生成的ld程序,得到“6.10. 再次调整工具链”才用到,这个时候你才会发现问题,如果象我一样没什么经验,或对系统理解不深,是不可能想到是在“5.12. Binutils-2.16.1 - 第二遍”中出的问题的,所以只能重来!(在这个问题上,我重新LFS了4次)不过,幸运的是由于这样才加深了我对这个问题的看法:)
以上是我个人的理解,做为LFS新手,很多理解都有局限性的,希望各位高手们能帮着纠正,多给点意见,提示:)
在这里再次感谢晨想版主以及hans_yu大侠的帮助!
回复 支持 反对

使用道具 举报

发表于 2007-7-5 20:38:04 | 显示全部楼层
好人要置顶,我也有这位兄弟的问题,兄弟的解释很好
回复 支持 反对

使用道具 举报

发表于 2008-11-20 16:08:05 | 显示全部楼层
收藏一下,留着以后用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表