LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: johnlight

LFS-version 6.1 到6.11处出错,提示找不到/tools/bin/gcc

[复制链接]
发表于 2006-2-23 17:23:48 | 显示全部楼层
在宿主系统的下lfs用户运行 ldd /tools/bin/gcc, 显示如下:
linux-gate.so.1 => ( 0xffffe000)
libc.so.6 => /lib/libc.so.6 (0x40021000)
/lib/ld-linux.so.2 (0x40000000)


/lib/ld-linux.so.2 (0x40000000)
这一行错了,应该是
/tools/lib/ld-linux.so.2
你没有做好 调整工具链


基本上,要是bash说
/tools/bin/gcc: No such file or directory
,如果
ls /tools/bin/gcc
可以的话,哪就是链接库错了.
回复 支持 反对

使用道具 举报

发表于 2006-2-23 17:38:38 | 显示全部楼层
我这有一个简单的检查:

chroot 之前:
for f in `ls /tools/bin/* /tools/sbin/*` ; do echo $f ; ldd $f | grep /usr/ ; echo ; done
for f in `ls -r /tools/lib/* | grep .so` ; do echo $f; ; ldd $f |grep /usr/ ; echo ; done
不应该出现 /usr ,出现了,就不要 chroot 了,重来吧.

第二遍, adjust 之后,也可以检查,这次是
for f in `ls /bin/* /sbin/* /usr/bin/* /usr/sbin/*` ; do echo $f ; ldd $f | grep /tools/ ; echo ; done
for f in `ls -r /lib/* /usr/lib/* | grep .so` ; do echo $f; ; ldd $f |grep /tools/ ; echo ; done
完成的文件,不能链接到 /tools 里.
回复 支持 反对

使用道具 举报

发表于 2006-2-23 19:45:38 | 显示全部楼层
的确是出错了啊。
# ldd /tools/bin/gcc
linux-gate.so.1 => ( 0xffffe000)
libc.so.6 => /lib/libc.so.6 (0x40021000)
/lib/ld-linux.so.2 (0x40000000)
应该是 /tools/lib/ld-linux.so.2。。。仔细看book是怎么说的。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-23 19:46:59 | 显示全部楼层
Post by dyhml
我这有一个简单的检查:

chroot 之前:
for f in `ls /tools/bin/* /tools/sbin/*` ; do echo $f ; ldd $f | grep /usr/ ; echo ; done
for f in `ls -r /tools/lib/* | grep .so` ; do echo $f; ; ldd $f |grep /usr/ ; echo ; done
不应该出现 /usr ,出现了,就不要 chroot 了,重来吧.

第二遍, adjust 之后,也可以检查,这次是
for f in `ls /bin/* /sbin/* /usr/bin/* /usr/sbin/*` ; do echo $f ; ldd $f | grep /tools/ ; echo ; done
for f in `ls -r /lib/* /usr/lib/* | grep .so` ; do echo $f; ; ldd $f |grep /tools/ ; echo ; done
完成的文件,不能链接到 /tools 里.


挺好的,加入集锦,懒得自己想了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 10:05:55 | 显示全部楼层
Post by dyhml


chroot 之前:
for f in `ls /tools/bin/* /tools/sbin/*` ; do echo $f ; ldd $f | grep /usr/ ; echo ; done
for f in `ls -r /tools/lib/* | grep .so` ; do echo $f; ; ldd $f |grep /usr/ ; echo ; done
不应该出现 /usr ,出现了,就不要 chroot 了,重来吧.

第二遍, adjust 之后,也可以检查,这次是
for f in `ls /bin/* /sbin/* /usr/bin/* /usr/sbin/*` ; do echo $f ; ldd $f | grep /tools/ ; echo ; done
for f in `ls -r /lib/* /usr/lib/* | grep .so` ; do echo $f; ; ldd $f |grep /tools/ ; echo ; done
完成的文件,不能链接到 /tools 里.


第一遍检查是在chapter 5全部完成之后进行吗?
第二遍检查是在chroot之后?

不太明白链接的关系:confused:

不过现在像这样gcc文件链接出错,应该怎么修改呢?
我退出chroot后,重新做了5.7(调整工具链)和5.11(重新编译GCC),之后再次 ldd /tools/bin/gcc,
结果仍然是 /lib/ld-linux.so.2 (0x40000000)

怎么做才能使工具链恢复正常呢?:ask
回复 支持 反对

使用道具 举报

发表于 2006-2-24 10:22:34 | 显示全部楼层
重做一次ld。
如果binutils的-build目录还在
make -C ld clean
make -C ld [color="Red"]LIB_PATH=/tools/lib
make -C ld install

如果-build目录没了
就重做configure。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-24 10:25:51 | 显示全部楼层
觉得你现在已经把你的系统搅和的够乱了:)。

which gcc 结果是? 你调整工具链后,做了测试没有?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-24 11:56:34 | 显示全部楼层
按照good02xaut说的,在保留的binutils-build目录中重新做了ld
然后又做了5.7的测试,测试成功。
which gcc 的结果是 /tools/bin/gcc
但是 ldd /tools/bin/gcc 的结果仍然是 /lib/ld-linux.so.2 啊:help
(以上这些都是在lfs用户下做的)

我的系统确实够乱的,到现在已经编译了4-5遍binutils, 6-7遍gcc,以及至少3遍glibc了
是不是现在这样,我就只能把LFS分区重新格式化,一切从头再来了?
回复 支持 反对

使用道具 举报

发表于 2006-2-24 12:57:37 | 显示全部楼层

当然可以修复的

Post by johnlight
按照good02xaut说的,在保留的binutils-build目录中重新做了ld
然后又做了5.7的测试,测试成功。
which gcc 的结果是 /tools/bin/gcc
但是 ldd /tools/bin/gcc 的结果仍然是 /lib/ld-linux.so.2 啊:help
(以上这些都是在lfs用户下做的)

我的系统确实够乱的,到现在已经编译了4-5遍binutils, 6-7遍gcc,以及至少3遍glibc了
是不是现在这样,我就只能把LFS分区重新格式化,一切从头再来了?


LFS里面所有的东东都是可以修复的,关键是从哪步开始。如果是从头开始,那还不如重做LFS。
如果是从中间修复,那起码可以节约一部分时间。

如果ldd /tools/bin/gcc 的结果仍然是 /lib/ld-linux.so.2,这应该是gcc第一次编译的结果。
如果你的gcc已经编译了2次了,还是这样,那是第2遍编译gcc之前,ld设置不对造成的。
回复 支持 反对

使用道具 举报

发表于 2006-2-24 13:02:05 | 显示全部楼层
在5.7时:
ldd /tools/bin/gcc 的结果仍然是 /lib/ld-linux.so.2      [color="Red"]正确

在5.12时:
ldd /tools/bin/gcc 的结果仍然是 /lib/ld-linux.so.2       [color="Red"]错误
ldd /tools/bin/gcc 的结果仍然是 /tools/lib/ld-linux.so.2   [color="Red"]正确

请确认你当前所处阶段。
回复 支持 反对

使用道具 举报

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

本版积分规则

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