六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 51|回复: 0

[LFS] My Own Linux 第二天

[复制链接]

升级  84%

48

主题

48

主题

48

主题

秀才

Rank: 2

积分
176
 楼主| 发表于 2013-1-16 02:28:43 | 显示全部楼层 |阅读模式
总结第一天的工作,其实还是有些问题的,首先binutils是用原有的gcc-4.1.2编译的,而我们的目标是使用gcc-4.3.3的版本,因此后面还需要重新用gcc-4.3.3编译binutils,因此我想对此作出一些改进,完全删除并再次建立干净的tools目录,重新按第一天的方式设置工作环境, 这时sources目录有我们第一天得到的source包,按如下顺序解压。

此外由于binutils的bug,在link glibc的时候会出现collect2: ld returned 1的错误,重新下载binutils的新版本和patch.

cd $LFS/sourceswget ftp://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2 #解压gcctar xvf gcc-4.3.3.tar.bz2# 将binutils解压GCC的源码目录中tar xvf binutils-2.19.tar.bz2 --strip-components=1 -C gcc-4.3.3#解压gmptar xvf gmp-4.2.4.tar.bz2#将所有源码移到gcc-4.3.3的gmp目录下mv gm-4.2.4 gcc-4.3.3/gmp#解压mpfrtar xvf mpfr-2.3.2.tar.bz2#将所有源码移到gcc-4.3.3的mpfr目录下mv mpfr-2.3.2 gcc-4.3.3/mpfrmkdir gcc-buildcd gcc-build#如此编译,可以和gcc一起做bootstrap, 我们只编译C语言来缩短时间CFLAGS="-O2 -march=i686" CC="gcc -B/usr/bin" ../gcc-4.3.3/configure --prefix=/tools --disable-nls --disable-multilib --disable-werror --enable-languages=c -build=i686-pc-linux-pcmake bootstrapmake installcp -v ld/ld-new /tools/bin  rm -rf gcc-buildrm -rf gcc-4.3.3编译完毕后可以使用"make check"运行测试套件。这个测试套件依赖于DejaGnu软件包,而DejaGnu又依赖于expect,expect依赖于tcl。如果只想编译 ld 可以使用"make all-ld",如果只想编译 as 可以使用"make all-gas"。类似的还有 clean-ld clean-as distclean-ld distclean-as check-ld check-as 等。这种方法比第一天的方法好得多,因为第一天的方法在后面的glibc编译时候会出现can not computer sizeof的错误,去掉 --with-binutils=/tools/bin才可通过,怀疑是ld未经过make bootstrap的缘故。如果一切顺利的话,我们现在得到了最新版的GCC 4.3.3, 接下来,我们需要将linux的头文件倒入include目录中,以便后面的编译工作,这个应该很容易。〔code]wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.7.tar.bz2tar xvf /lfs-sources/linux-2.6.28.7.tar.bz2cd linux-2.6.28.7make mrpropermake headers_checkmake INSTALL_HDR_PATH=dest headers_installcp -rv dest/include/* /tools/includecd ..rm -rf linux-2.6.28.7

然后开始glibc的编译工作.
你必须设定march这个参数才行,要不然会出现“undefined reference to `__sync_bool_compare_and_swap_4′.”这个错误
Core 2 Duo,
GCC 4.2,CFLAGS 添加 -march=nocona -mtune=generic。

如果是GCC 4.1,Core Solo/Duo使用-march=prescott;
Core 2 Duo/Solo则使用-march=nocona。
i686等类似设置,例如CFLAGS=”-O2 -march=i686″
-----------------
看到在build ncsd目录时也有错误
如果还有undefined reference to `__stack_chk_guard’ 这个错误的话,你需要手工编辑Makefile,找到这一行:
LDLIBS-nscd = $(selinux-LIBS)
添加 -lssp 即
LDLIBS-nscd = $(selinux-LIBS) -lssp

wget http://sources.redhat.com/pub/glibc/snapshots/glibc-2.9-20090308.tar.bz2tar xvf glibc-2.9-20090308.tar.bz2cd glibc-2.9-20090308mkdir -v ../glibc-buildcd ../glibc-buildCFLAGS="-O2 -march=i686" CC="gcc -B/tools/bin" ../glibc-2.9-20090308/configure --prefix=/tools \--disable-profile --enable-add-ons=nptl \--enable-kernel=2.6.28 --with-binutils=/tools/bin \--without-gd --with-headers=/tools/include \--without-selinux --build=i686-pc-linux-gnu --disable-multilibmakemkdir -v /tools/etctouch /tools/etc/ld.so.confmake installcd ..rm -rf glibc-buildrm -rf glibc-glibc-2.9-20090308


有一些麻烦问题需要处理,要不然,这个新的gcc环境还是对你
现在运行的系统有关系,因为gcc的fixincludes脚本在创建gcc的过程中,由于某些原因把你系
统里的头文件复制给这个新的gcc环境中去了。这就是好心办坏事,不过不用担心,是有办法挽
救的。执行下面的命令会将fixincludes产生的影响处理掉,当然,如果fixincludes没有帮倒
忙,下面的命令也不会作坏事,破坏这个新生的gcc环境:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

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