晚上继续弄LFS,在弄version-check.sh的时候竟然发现我现在的sh竟然是dash,这是什么东西?然后上网百度才发现 “buntu6.10已将先前默认的bashshell更换为了dash。其表现是/bin/sh链接到了/bin/dash而不是传统的/bin /bash”,而更改过来的方法是:
shell> sudo dpkg-reconfigure dash
然后系统会询问你是否将dash用作默认shell,选择“否”就会改回正常的bash了。
然后试图搭建LFS,在读LFS-BOOK的时候发现创建LFS通常需要一个新的分区,但好在他给出了一个文档,上面写了如何在当前系统正在使用的分区上创建LFS,使得LFS跟当前系统公用一个分区,并且友好相处,而且貌似还可以从一个系统启动另一个系统,不影响相互的性能。
链接为:http://www.linuxfromscratch.org/hints/downloads/files/lfs_next_to_existing_systems.txt
上
面说:“This hint addresses only the aspects relevant to building and
booting an LFS system next to other data on an existing partition rather
than using a fresh, empty, dedicated partition.”
然后我就开始解压编译第五章中的包和补丁,不过真是悲催,在第一步解压的时候就发现错误,我在解压的时候:
shell> tar xzvf binutils-2.22.tar.bz2
报错说:
tar: Child returned status 1
tar: Error is not recoverable: exiting now
然后上网查发现了其中的问题,在tar的手册中:
-z, --gzip, --gunzip --ungzip
而我要解压的binutils-2.22.tar.bz却不是以gzip格式压缩的,所以不能用z参数,只能:
shell> tar xvf binutils-2.22.tar.bz2
这里tar的四个参数的意思分别为:
x - 解压缩
v - 报出详细信息
f - 指定文件
z - 用gzip对文件进行解压或压缩
然
后在编译Glibc-2.16.0的时候又遇到了问题,其实我觉得很有可能是在我解压之前的一次手误造成的,因为在解压Glibc之前是安装Linux-
3.5.2 API Headers,安装好之后忘了切换切换到上级目录和删除Linux-3.5.2 API
Headers的两个目录,然后就直接在Linux-3.5.2 API Headers的build目录下执行了这两个操作:
if [ ! -r /usr/include/rpc/types.h ]; then
su -c 'mkdir -p /usr/include/rpc'
su -c 'cp -v sunrpc/rpc/*.h /usr/include/rpc'
fi
和
sed -i 's/ -lgcc_s//' Makeconfig
当
执行sed那条命令的时候,返回错误说我没有Makeconfig这个文件,我一看原来现在已经是在安装Glibc了,而我现在还在Linux
Header的目录里,然后马上删除了Linux Header的两个目录,然后解压了Glibc的这个目录,然后继续执行,上面两个操作,然而执行到
make && make
install的时候就出现了两个错误。后来,为了重新安装Glibc,我在Glibc需要的build目录下执行了make
clean,然后又执行了make uninstall,希望能卸载刚刚安装过的Glibc,但是发现在卸载的时候也就是执行make
uninstall的时候仍然有错误,于是我就直接删掉了Glibc的这两个目录然后重新解压继续执行。不过在make的时候还是有相同的错误:
/mnt/lfs/tools/bin/../lib/gcc/i686-lfs-linux-gnu/4.7.1/http://www.cnblogs.com/http://www.cnblogs.com/i686-lfs-linux-gnu/bin/ld: cannot find -lgcc_eh
collect2: error: ld returned 1 exit status
make[2]: *** [/mnt/lfs/sources/glibc-build/elf/sln] Error 1
make[2]: Leaving directory `/mnt/lfs/sources/glibc-2.16.0/elf'
make[1]: *** [elf/others] Error 2
make[1]: Leaving directory `/mnt/lfs/sources/glibc-2.16.0'
make: *** [all] Error 2
lfs@Linux:/mnt/lfs/sources/glibc-build$ vi /usr/include/rpc/types.h
lfs@Linux:/mnt/lfs/sources/glibc-build$ ls /usr/include/rpc/types.h
/usr/include/rpc/types.h
晚上给任世军发短信询问这个问题,但是他一直没回。没办法,只能周五去问问任世军他老人家,而且这两天还不能关电脑。
不过后来这个问题解决了,在Google上搜是这样的:http://permalink.gmane.org/gmane.linux.lfs.devel/12744
我
试了一下,但还是出错误,没办法,试了各种办法,然后办法各种组合,最后回过头来看一下错误,我的错误是:“cannot find
-lgcc_eh”,而论坛上的错误是“cannot find -lgcc_s”,然后我就想,干脆把书上说的“sed -i 's/
-lgcc_s//' Makeconfig” 改成 “sed -i 's/ -lgcc_eh//'
Makeconfig”,后来在试一下果然错误就变了,但还是有错误,错误跟之前的一样他说我“cannot find
-lgcc_s”,于是我照葫芦画瓢,重来的时候把两个操作都加上了即:
shell> sed -i 's/ -lgcc_s//' Makeconfig
shell> sed -i 's/ -lgcc_eh//' Makeconfig
最后果然就可以了,然后make install也正常执行,最后用书上说的sanity检查也没有问题:
lfs@Linux:/mnt/lfs/sources/glibc-build$ echo 'main(){}' > dummy.c
lfs@Linux:/mnt/lfs/sources/glibc-build$ $LFS_TGT-gcc dummy.c
lfs@Linux:/mnt/lfs/sources/glibc-build$ readelf -l a.out | grep ': /tools'
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
看样子应该就是可以了,但是还不敢断定,因为书上说还要等接下来安装Building的时候再进行一次检查,如果那次检查也通过就没事了,现在不能确定。
浙公网安备 33010602011771号