bootstrap的必要性
时间:2006-03-03
来源:互联网
还有,感觉按照LFS book做的tool chain还是不“纯净”,就是第一次编译binutils和gcc时带进的host的glibc的行为会对以后的一切产生影响,也就是说,如果是在两台安装不同版本glibc的机器上做LFS,最后的二进制文件有可能会不一样。
另外,有没有这样的可能,就是gcc不能完成bootstrap?也就是不管自己编译自己多少次,每次结果都不一样?
作者: vanhu 发布时间: 2006-03-03
当内存 某块出错,但又没有影响到 可执行代码区,又可能出现此情况.
在 windows下, 我曾经出现过同一个文件, 3次 md5 都不一样的情况. 上天保佑,那台只能用 98 的电脑 ,已经退伍了.
作者: dyhml 发布时间: 2006-03-03
这样,就是说只用gcc-3.3来编译LFS-6.1.1的gcc-3.4.3一次,但gcc-3.3采用第一版的ABI,不做bootstrap话,你的gcc-3.4.3是仍是第一版ABI的binary。若果再做bootstrap让gcc-3.4.3去编译gcc-3.4.3的话,得出来的gcc-3.4.3就是采用第二版ABI的binary了
当然,除了ABI的分野,其他如生成的代码也有所不同
作者: d00m3d 发布时间: 2006-03-03
作者: d00m3d
bootstrap 主要目的是要摆脱 gcc 从主系统的gcc带来的影响,举例说:你准备做一个LFS-6.1.1,主系统是用gcc-3.3的
这样,就是说只用gcc-3.3来编译LFS-6.1.1的gcc-3.4.3一次,但gcc-3.3采用第一版的ABI,不做bootstrap话,你的gcc-3.4.3是仍是第一版ABI的binary。若果再做bootstrap让gcc-3.4.3去编译gcc-3.4.3的话,得出来的gcc-3.4.3就是采用第二版ABI的binary了 当然,除了ABI的分野,其他如生成的代码也有所不同 |
不过我们的目标应该是最终的系统,第一次编译出来的gcc本身的二进制结构并不重要,重要的是它的行为。我有一个命题,就是:凡是一个编译器能够bootstrap,那么用这个编译器的“non-bootstrap”版本和“bootstrap”版本编译出来的东西都是一样的,但我现在还没有想到怎么证明它,只是觉得很直观。如果能证明,那么bootstrap就和non-bootstrap完全一样了,也就没有bootstrap的必要了,因为总是假定gcc能够bootstrap。
作者: vanhu 发布时间: 2006-03-03
作者: vanhu
凡是一个编译器能够bootstrap,那么用这个编译器的“non-bootstrap”版本和“bootstrap”版本编译出来的东西都是一样的
|
作者: zlbruce 发布时间: 2006-03-03
作者: zlbruce
一样的也最多是 gcc 来编译出来的东西一样,但是 gcc 本生并不一样。
|
作者: vanhu 发布时间: 2006-03-03
bootstrap 的作用是检查 编译出来的gcc 是否正确,并没有进行任何纯净度的操作。。。(不是提纯。嘿嘿。)
作者: 晨想 发布时间: 2006-03-03
bootstrap可以让编译器得到优化,第2遍就可以停止,第3遍是为了保证校验。
举个例子:
gcc-3.2 编译gcc-4.0的src,看看有什么区别
只一遍:gcc-4的大小为10M(假设),原因,gcc-3.2的优化,真能这么大。
第二遍:gcc-4的大小为8M,使用第一次生成的gcc-4编译,优化改进
第三遍:和第2遍一摸一样。
这是个大概的描述,理解一下,就明白了
在什么情况用bootstrap好?编译器的版本低于src的版本时!同版本编译无意义:)
作者: good02xaut 发布时间: 2006-03-03
我只是想知道,bootstrap之后, make install 的时候安装的是第几次编译出来的gcc。这个让我很好奇。我没研究过,不过我觉得应该是安装第一次出来的结果。
作者: 晨想 发布时间: 2006-03-03
反正感觉不是第一次出来的:)
作者: good02xaut 发布时间: 2006-03-03
作者: 晨想 发布时间: 2006-03-03
通过不同的优化,生成的gcc大小应该不可能一样大的。
有兴趣可以对比一下,到底系统install的是哪个。
还有一点,第二次编译的时候xgcc好像把第一次的覆盖了,install的时候系统找不到那个了,怎么装啊?呵呵
作者: good02xaut 发布时间: 2006-03-03
作者: 晨想 发布时间: 2006-03-03
作者: good02xaut 发布时间: 2006-03-03
作者: 晨想 发布时间: 2006-03-03
很多时候都不了了之,不过答案已经有了,即使没有明确出来,也给了明确的方法。
唯一需要做的就是验证的过程,毕竟不能每个问题都亲自验证。
想知道答案还是自己验证比较好,一来有成就感,二来可以更深入的理解。
全面贯彻授人以渔的方针
呵呵
作者: good02xaut 发布时间: 2006-03-05
只有 第二次 和 第三次 的 gcc 完全相同时, 才会安装, 这时 第二遍 和 第三遍 没有区别.
如果不同, make 就会停止,报错.
作者: dyhml 发布时间: 2006-03-05
一样毕竟不是一个啊
根据生成的时间是可以看出先后的,到底安装的是哪个呢?
还是让想知道答案的去验证吧,反正我是不去看了:)
呵呵
作者: good02xaut 发布时间: 2006-03-05
This target does not just compile GCC, but compiles it several times. It uses the programs compiled in a first round to compile itself a second time, and then again a third time. It then compares these second and third compiles to make sure it can reproduce itself flawlessly. This also implies that it was compiled correctly.
我还是认为装的是第一次的,后边2次只是比较。虽然应该没什么区别,但是还是好奇。呵呵。
作者: 晨想 发布时间: 2006-03-09
作者: 晨想
Bootstrap:
This target does not just compile GCC, but compiles it several times. It uses the programs compiled in a first round to compile itself a second time, and then again a third time. It then compares these second and third compiles to make sure it can reproduce itself flawlessly. This also implies that it was compiled correctly. 我还是认为装的是第一次的,后边2次只是比较。虽然应该没什么区别,但是还是好奇。呵呵。 |
> find ./ -name 'cc1' -exec ls -l {} \; -exec md5sum {} \;
-rwxr-xr-x 1 lfs lfs 16968934 02-17 10:35 ./gcc/cc1
58b7dd1725cbe57e1d69e75530986401 ./gcc/cc1
-rwxr-xr-x 1 lfs lfs 18934182 02-17 10:12 ./gcc/stage1/cc1
d108f6d510d0aaffe9029fb05ed5a225 ./gcc/stage1/cc1
-rwxr-xr-x 1 lfs lfs 16968934 02-17 10:28 ./gcc/stage2/cc1
58b7dd1725cbe57e1d69e75530986401 ./gcc/stage2/cc1
> cd /tools
> find ./ -name 'cc1' -exec ls -l {} \; -exec md5sum {} \;
-rwxr-xr-x 1 lfs lfs 16968934 02-17 10:36 ./libexec/gcc/i686-pc-linux-gnu/4.1.2/cc1
58b7dd1725cbe57e1d69e75530986401 ./libexec/gcc/i686-pc-linux-gnu/4.1.2/cc1
按照md5看,装的肯定不是第一次,stage2 或者 stage3, 两个的md5是一样的
作者: jinxl 发布时间: 2008-02-17
作者: 晨想 发布时间: 2008-02-17
gcc-build 目录下:
d00m3d@BlackMesa:~/BLFS-sources/gcc-build$ find ./ -name 'cc1' -exec ls -l {} \; -exec md5sum {} \; -rwxrwxr-x 1 d00m3d d00m3d 24754861 Feb 23 15:02 ./prev-gcc/cc1 78fef94f8e63ba48d693f6eb92445651 ./prev-gcc/cc1 -rwxrwxr-x 1 d00m3d d00m3d 55755072 Feb 23 14:15 ./stage1-gcc/cc1 6934e9a5726d5fad725ebe57182cd91d ./stage1-gcc/cc1 -rwxrwxr-x 1 d00m3d d00m3d 24754739 Feb 23 15:19 ./gcc/cc1 7f2e56f6a4b8d7ebe3bb62388d96e6c7 ./gcc/cc1 d00m3d@BlackMesa:~/BLFS-sources/gcc-build$
d00m3d@BlackMesa:/usr/lib$ cd gcc d00m3d@BlackMesa:/usr/lib/gcc$ ls i686-pc-linux-gnu d00m3d@BlackMesa:/usr/lib/gcc$ cd i* d00m3d@BlackMesa:/usr/lib/gcc/i686-pc-linux-gnu$ ls 4.2.2 4.3.0 d00m3d@BlackMesa:/usr/lib/gcc/i686-pc-linux-gnu$ cd 4.3.0 d00m3d@BlackMesa:/usr/lib/gcc/i686-pc-linux-gnu/4.3.0$ ls cc1 cc1plus collect2 install-tools d00m3d@BlackMesa:/usr/lib/gcc/i686-pc-linux-gnu/4.3.0$ ll total 51044 -rwxr-xr-x 1 root root 24754739 Feb 23 15:30 cc1 -rwxr-xr-x 1 root root 27130027 Feb 23 15:30 cc1plus -rwxr-xr-x 1 root root 310905 Feb 23 15:30 collect2 drwxrwxr-x 2 root root 4096 Feb 23 15:30 install-tools d00m3d@BlackMesa:/usr/lib/gcc/i686-pc-linux-gnu/4.3.0$ md5sum cc1 7f2e56f6a4b8d7ebe3bb62388d96e6c7 cc1 d00m3d@BlackMesa:/usr/lib/gcc/i686-pc-linux-gnu/4.3.0$
作者: d00m3d 发布时间: 2008-02-25
作者: superyongzhe 发布时间: 2010-06-01
作者: superyongzhe 发布时间: 2010-06-01
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28