LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1673|回复: 18

关于lfs6.3的总结和疑问

[复制链接]
发表于 2009-12-16 12:04:20 | 显示全部楼层 |阅读模式
I>.解决为什么可以编译出一个与host机器 没有依赖的 临时环境.我觉得4个概念要弄清楚
1.lfs6.3第6章编译glibc中说"The Glibc build system is self-contained",也就是说glibc只需要 一些工具(binutil,gcc....),而它本身不需要运行,也不需要什么依赖.
2.第5章gcc-pass2中:"atching now rather than adjusting the specs file after installation ensures that the new dynamic linker is used during the actual build of GCC"
这句话就是说,[gcc本身是自编译的]打了patch之后,gcc编译的过程中将自己连接到 我们新的glibc.
到此为止,glibc,gcc已经是相互依赖,而且都是与host机器脱离.gcc-pass2以后编译的包也就依赖 新的glibc
3.为什么有binutil-pass1,gcc-pass1,可能是 新的系统需要 新版本的binutil和gcc,而且有利于和host机器脱离关系,
更有利于编译后面的包,因为我们可以在编译binutil和gcc的时候就能指定选项(头文件,库路径....),不用因为使用host机器的binutil个gcc,
而每次都需要指定特定的编译选项。
4.为什么编译第6章.
我觉得是因为路径的缘故.因为第5章,我们不嫩指定--prefix=/usr,而第6章 我们需要的 命令,库 又不能在/tools下.所以从新编译,实现的像标准linux那样

我的疑问::::::
如1所说glibc是自给自足的.可是在第6章,没有调整gcc工具链的时候,先编译的glibc.
这样的话glibc的库肯定可以运行,可是和glibc一起安装的命令(catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd....).
这些命令应该指向/tools/lib.可是实际上不是.这些命令都指向/lib.我不知道为什么???????
如果glibc自给自足的话,那也太智能了!!!!!!
大家给解答
发表于 2009-12-16 12:38:53 | 显示全部楼层
在 LFS 环境下,您不容易理解"自包含",如果进行 CLFS,您会清楚许多:
自包含是指用裸编译器可以编译;裸编译器是没有任何库支持的编译器,如 CLFS 中 gcc-pass1。
典型的自包含的例子是 linux-kernel freebsd-kernel 及各种 libc,原因很简单,它们是最基本的东东,编译时不能依赖任何其它库。

第二个问题原因很简单:避免新的工具链访问到宿主资源。

第三个问题是为了避免原宿主工具链对新系统造成影响,如 ABI 方面的影响。

第四个问题只是 LFS 为了满足一般 GNU/Linux 系统目录习惯结构,只是个风格问题,同时也进一步保证系统纯度。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-16 12:57:35 | 显示全部楼层
CLFS???先去看看
回复 支持 反对

使用道具 举报

发表于 2009-12-16 18:13:55 | 显示全部楼层
Post by 聚焦深空;2056293
在 LFS 环境下,您不容易理解"自包含",如果进行 CLFS,您会清楚许多:
自包含是指用裸编译器可以编译;裸编译器是没有任何库支持的编译器,如 CLFS 中 gcc-pass1。


“裸编译器”这个说法不对头,所有的编译器链接的时候都要找链接库,除非人为指定不要库

“自包含”应该这样理解:编译器链接的时候不需要到外部去找库,软件本身就包含有库,这个库编译好了以后,软件中的其它库和执行文件直接链接到这个库上,这样整个软件完全不依赖外部的库。
回复 支持 反对

使用道具 举报

发表于 2009-12-16 20:17:50 | 显示全部楼层
楼上,“裸编译器” 是偶个人专有名词,不许乱用,要抽版权费用的,拿钱来。

这个名词其实不是偶第一个用起来的,但在中文圈偶可能是第一个。
是个非常形象的说法,意思也贴切,就如偶前面解释的。
如果您没有 c 基础,不会明白有多么贴切。
回复 支持 反对

使用道具 举报

发表于 2009-12-16 20:21:47 | 显示全部楼层
Post by 5000;2056366
“自包含”应该这样理解:编译器链接的时候不需要到外部去找库,软件本身就包含有库,这个库编译好了以后,软件中的其它库和执行文件直接链接到这个库上,这样整个软件完全不依赖外部的库。

对自包含的内核,您也要这么解释?
回复 支持 反对

使用道具 举报

发表于 2009-12-16 21:50:21 | 显示全部楼层
内核级代码本来就不会和用户级代码捞在一起,也就不会链接到宿主机的库上,本身就自成一体,无所谓自包含一说,您不知道吗?
回复 支持 反对

使用道具 举报

发表于 2009-12-16 21:53:10 | 显示全部楼层
Post by 聚焦深空;2056406
楼上,“裸编译器” 是偶个人专有名词,不许乱用,要抽版权费用的,拿钱来。

这个名词其实不是偶第一个用起来的,但在中文圈偶可能是第一个。
是个非常形象的说法,意思也贴切,就如偶前面解释的。
如果您没有 c 基础,不会明白有多么贴切。


原来是大师自创的术语啊,偶等小民可用不起,也用不惯

裸X编译器,听着就别扭,还是留您自个用吧
回复 支持 反对

使用道具 举报

发表于 2009-12-16 22:08:51 | 显示全部楼层
如果某人没事干,写一个用户空间的软件,不使用任何库,不使用任何系统调用,按您标准也不算自包含的?
没有多少人这么做,是因为不经济。
库只是特殊形式的代码。

内核只是特殊些的软件,一般会使用些特殊的硬件特性,对编译器来说所有代码是一样的,没有高低贵贱。

请全面考虑问题。
回复 支持 反对

使用道具 举报

发表于 2009-12-17 13:04:39 | 显示全部楼层
我的这个解释只针对LZ的问题所作,您不必死钻牛角尖,况且您所举的特例在现实中根本不存在!

库的概念仅存在于用户空间,而您说linux-kernel freebsd-kernel不能依赖任何其它库,这不是很可笑吗?它能依赖得了吗?!还搬出所谓的原创词语去糊弄人家,这我就看不下去了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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