再次开始自己的DIY之路。
说是DIY,其实也算是照葫芦画瓢,完全根据lfs网站提供的电子书一步一步制作,有很多命令都是直接复制下来的。不过,有一点没有遵照lfs的提示,就是尽量使用了比较新的软件包,而不完全使用书上提到的软件包。(当然这也带来了很多麻烦。)
因为急于开始制作,前面的很多内容都直接略过,从第五章构建临时系统开始。刚开始当然是最基本的工具的制作,首先是Binutils,它包含了连接器、汇编器和一些处理目标文件的工具。交叉编译最麻烦的就是要指定宿主机工具位置和目标机安装位置。在第一次安装完Binutils的工具之后,还要清除ld,重新指定新编译的库文件重新编译,并将最终生成的ld复制到目标位置。
然后就是gcc了,一个强大的编译器。当然,第一次只是进行基本的编译,为后面完整编译gcc做好准备。因此,在使用很长的参数进行配置之后,不是直接make,而是使用make bootstrap进行编译,告诉目标不仅仅是编译gcc,在第一次编译完成以后,再编译两次,并自动比较后两次的结果。(在后来SVN里的书中已经说不用这样了,gcc已经将bootstrap参数设置为默认的了。)因为要多次编译gcc,这步超级花时间,我的电脑大概需要1个半小时。
然后又是一个非常耗时的软件包----glibc。这个gun的c库非常巨大,因此非常麻烦。刚开始总是在一些地方编译不通过,后来才在lfs网站上找到了glibc的gcc4.3补丁。自从gcc4.3发布以后,许多以前的软件的编译都可能会出点问题,好像主要是因为gcc4.3不自动添加常用的头文件,很多程序用以前的gcc编译器能够通过,而gcc4.3就会报一些函数没有定义这样的问题。打上了补丁之后,也要花上1个多小时,才能编译完成。
因为算是简单的交叉编译,库文件之间的依赖关系需要经过调整。不过没有用过sed这个工具,这种命令全部直接复制,粘贴。再需要安装一些测试套件,对编译完成的软件包进行测试。这里也遇到了不小的麻烦。就是tcl和expect组和。安装tcl最新的版本没有问题,但是expect总是无法正常安装,一些关于tcl定义的宏都没有被定义。最郁闷的是去网上搜索tcl,经常搜索到TCL公司!后来看了一些论坛的帖子和邮件列表的讨论之后,才发现是因为expect长时间没有更新,而它所依赖的tcl却发展迅速,频频更新,应该是不支持新的版本了。换了就的版本之后,终于成功安装了这个用于测试的软件组和。
之后又是gcc,这次需要使用第一次编译的gcc来编译新的完整的gcc。(听上去有点绕)但是系统却总是调用本来的gcc。没办法了,又回到书的前面关于环境变量的建立的章节。学者它新建了一个组和用户,再对bash的调用路径做了修改。由于还要chown,索性全部删除重新再来了。