lfs-笔记

bin=ld
0. ld,gcc,glibc,其中glibc是核心,一步步转向新系统

1.用host的glibc-0,gcc-0,ld-0生成了ld-1,ld-1会link  host/lib下的库(也只能这样,因为新的还没生出来)
2.用ld-0,glibc-0,gcc-0生成gcc-1,gcc-1会使用host/lib下的ld-0而不是ld-1(也只能这样,因为它是新生出来的,没有修改过linker)

  好了,现在有了
  ld-1	指向glibc-0,由指向glibc-0的gcc-0,ld-0生成
  gcc-1,指向glibc-0,由指向glibc-0的gcc-0,ld-0生成
  
  但它们都有“问题”

3.用有“问题”的ld-1和gcc-1(通过./configure进行配置--with-binutils=/tools/bin)
  生成glibc-1(我们自己生成的glibc,安装到工具目录tools下面,形成工具链的一部分)
  
  
  这个时候,我们有了
  ld-1		指向glibc-0,由指向glibc-0的gcc-0,ld-0生成
  gcc-1,	指向glibc-0,由指向glibc-0的gcc-0,ld-1生成
  glibc-1,	由ld-1,gcc-1生成

4.调整ld-1和gcc-1指向glibc-1(/tools/lib)而不再指向系统的lib和ld0(glibc-0)
  4.1 需要调整ld-1,让它指向生成的tools下的glibc-1(make clean ...的那几句重新生成ld),新的ld-1被称为ld-a
      (使用glibc-1即tools/lib)
  4.2 修改gcc-1的SPEC文件,让gcc-1指向glibc-1的linker,也就是上面的ld-a,新的gcc-1被称为gcc-a

  现在,我们有了:

    ld-a	指向glibc-1、由指向glibc-0的ld-0,gcc-0生成
    gcc-a	指向glibc-1、由指向glibc-0的ld-0,gcc-0生成
    glibc-1	用ld-1,gcc-1生成

5.  需要“自编译所有东西”,所以"*-0"式的host的东西都不要,需要在工具链内部重新生成。
    这时候用上面那三个东西,它们自成体系,生成ld-2,gcc-2; 以后再编译工具链其它工具的话就使用:
    ld-2	指向glibc-1、由指向glibc-1的gcc-a,ld-a生成
    gcc-2	指向glibc-1、由指向glibc-1的gcc-a,ld-a生成
    glibc-1	用ld-1,gcc-1生成

6.  chroot,转到新系统中,首先应该编译glibc-2(使用ld-2/gcc-2/glibc-1)
    并将glibc-2安装到新系统的/usr等系统目录
    
7. 第二次调整工具链
   对于chroot后的新系统,由于ld-2和gcc-2都指向tools/lib,而我们现在是新系统需要指向新的
   /usr/lib、/lib等新“系统目录”所以也需要调整工具链:
   ld-b:	指向glibc-2,由指向glibc-1的gcc-a,ld-a生成
   gcc-b:	指向glibc-2,由指向glibc-1的gcc-a,ld-a生成
8. 生成ld-3,gcc-3
   ld-3:	指向glibc-2,由指向glibc-2的gcc-b,ld-b生成
   gcc-3:	指向glibc-2,由指向glibc-2的gcc-b,ld-b生成

   此时,我们已经有了新系统中的所有东西
	ld-3、gcc-3、glibc-2
   




11
l





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值