Chinaunix首页 | 论坛 | 博客
  • 博客访问: 220273
  • 博文数量: 33
  • 博客积分: 256
  • 博客等级:
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-14 18:39
个人简介

前方的路,充满了艰辛。-

文章分类
文章存档

2014年(1)

2013年(27)

2012年(5)

分类: LINUX

2013-04-20 09:48:18


                                          工具链编译图

                                         系统搭建原理图
 
在制作用LiveCD搭建Linux系统的时候,既然临时系统具有一定的独立性,为什么还要制作目标系统。直接用临时系统不就行了吗。到底差别在哪里呢?

chenyx的回答:
临时工具链还不是纯净的工具链,还有宿主系统的影响,所以,还需要净化,最终做出目标的工具链.
 lfs的工具链主要是gcc,binutils,ld库的变化,3次构建,每一次都是想办法脱离宿主机的gcc环境,构建出自己的目标gcc环境
我感觉:ld库应该是Glibc(标准C库)

chenyx的回答:
      LFS的基本原理是:从host(发行版linux或liveCD)环境中,先创建一个临时环境(也就是在tools目录下建立个各种工具),此时还会部分利用host的工具,然后利用这       个临时环境,此时脱离了host的所有工具,来建立目标机的所有工具。 
      第一遍的binutils和gcc只用来编译glibc,在编译过程中还需要利用host的库文件来执行程序,而glibc不需要C++,所以不用编译。
      第二遍的binutils、gcc、glibc作为一个完整的工具链,用来编译临时系统,所生成的程序都会从tools/lib目录下查找动态链接库来执行,因此生成的程序就与host系统无关了,也是因为这个原因不能使用第一遍的bintuils和gcc。
      而最终生成的系统需要从缺省的/lib或/usr/lib下查找库文件,所以后面还需要再编译一次binutils和gcc。 

临时系统,所生成的程序都会从tools/lib目录下查找动态链接库来执行
最终生成的系统需要从缺省的/lib或/usr/lib下查找库文件
binutils生成的ld可以指定函数库文件所在路径


那么,既然用临时系统的工具链编译目标系统的Glibc可以独立运行,那么为什么还要编译预工具链呢?为什么不直接由主系统的工具链直接编译临时系统的Glibc呢?

hans_yu的回复:
LFS 中 binutils一共编译三次 
第1次编译(binutils pass1)(预工具链) 的程序是个临时程序,供gcc和glibc的编译使用,其中ld指向host(主系统)的库目录。然后又重新生成了一次ld程序 
      Shell代码 
      make -C ld clean  
      make -C ld LIB_PATH=/tools/lib  
      cp -v ld/ld-new /tools/bin  
这个ld-new程序还未启用,到5.7调整工具链以后才被用到 
第2次编译(binutils pass2)(临时工具链)的程序是为生成临时系统使用的,在安装完以后,又重新生成了ld一次,这次重新生成的ld程序将来用以生成目标系统,在将来6.10中才被用到 
第3次编译的binutils(目标工具链)程序是目标系统中的程序,如果不打算在目标系统中安装编译工具链,这个就可以不做了

上面的内容转帖自

阅读(2697) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~