关于lfs6.3的总结和疑问
时间:2009-12-16
来源:互联网
1.lfs6.3第6章编译glibc中说"The Glibc build system is self-contained",也就是说glibc只需要 一些工具(binutil,gcc....),而它本身不需要运行,也不需要什么依赖.
2.第5章gcc-pass2中:"Patching 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自给自足的话,那也太智能了!!!!!!
大家给解答
作者: yueluck 发布时间: 2009-12-16
自包含是指用裸编译器可以编译;裸编译器是没有任何库支持的编译器,如 CLFS 中 gcc-pass1。
典型的自包含的例子是 linux-kernel freebsd-kernel 及各种 libc,原因很简单,它们是最基本的东东,编译时不能依赖任何其它库。
第二个问题原因很简单:避免新的工具链访问到宿主资源。
第三个问题是为了避免原宿主工具链对新系统造成影响,如 ABI 方面的影响。
第四个问题只是 LFS 为了满足一般 GNU/Linux 系统目录习惯结构,只是个风格问题,同时也进一步保证系统纯度。
作者: 聚焦深空 发布时间: 2009-12-16
作者: yueluck 发布时间: 2009-12-16
作者: 聚焦深空
在 LFS 环境下,您不容易理解"自包含",如果进行 CLFS,您会清楚许多:
自包含是指用裸编译器可以编译;裸编译器是没有任何库支持的编译器,如 CLFS 中 gcc-pass1。 |
“自包含”应该这样理解:编译器链接的时候不需要到外部去找库,软件本身就包含有库,这个库编译好了以后,软件中的其它库和执行文件直接链接到这个库上,这样整个软件完全不依赖外部的库。
作者: 5000 发布时间: 2009-12-16
这个名词其实不是偶第一个用起来的,但在中文圈偶可能是第一个。
是个非常形象的说法,意思也贴切,就如偶前面解释的。
如果您没有 c 基础,不会明白有多么贴切。
作者: 聚焦深空 发布时间: 2009-12-17
作者: 5000
“自包含”应该这样理解:编译器链接的时候不需要到外部去找库,软件本身就包含有库,这个库编译好了以后,软件中的其它库和执行文件直接链接到这个库上,这样整个软件完全不依赖外部的库。
|
作者: 聚焦深空 发布时间: 2009-12-17
作者: 5000 发布时间: 2009-12-17
作者: 聚焦深空
楼上,“裸编译器” 是偶个人专有名词,不许乱用,要抽版权费用的,拿钱来。
这个名词其实不是偶第一个用起来的,但在中文圈偶可能是第一个。 是个非常形象的说法,意思也贴切,就如偶前面解释的。 如果您没有 c 基础,不会明白有多么贴切。 |
裸X编译器,听着就别扭,还是留您自个用吧
作者: 5000 发布时间: 2009-12-17
没有多少人这么做,是因为不经济。
库只是特殊形式的代码。
内核只是特殊些的软件,一般会使用些特殊的硬件特性,对编译器来说所有代码是一样的,没有高低贵贱。
请全面考虑问题。
作者: 聚焦深空 发布时间: 2009-12-17
库的概念仅存在于用户空间,而您说linux-kernel freebsd-kernel不能依赖任何其它库,这不是很可笑吗?它能依赖得了吗?!还搬出所谓的原创词语去糊弄人家,这我就看不下去了!
作者: 5000 发布时间: 2009-12-17
gcc Now, you can build GCC. (Use v3.3 or later - v3.2.x has a bug with internal __malloc declarations resulting in an error during compilation. This could be fixed by patching four occurrences in three different source files, but I lost the diff output and am not in a mind of re-checking. ;-) )
cd /usr/src/build-gcc The path has to be extended since GCC needs the binutils we built earlier at some point of the build process. You might want to add these extensions to your $PATH permanently, so you won't have to use fully qualified path names every time you call your cross-compiler.export PATH=$PATH:$PREFIX/bin ../gcc-x.x.x/configure --target=$TARGET --prefix=$PREFIX --disable-nls \ --enable-languages=c,c++ --without-headers make all-gcc make install-gcc --disable-nls is the same as for binutils above. --without-headers tells GCC not to rely on any C library (standard or runtime) being present for the target. --enable-languages tells GCC not to compile all the other language frontends it supports, but only C (and optionally C++). If you are compiling GCC <= 3.3.x, you need --with-newlib as additional parameter. Those older versions have a known bug that keeps --without-headers from working correctly. Additionally setting --with-newlib is a workaround for that bug. Summary Now you have a "naked" cross-compiler. It does not have access to a C library or C runtime yet, so you cannot use any of the standard includes or create runable binaries. But it is quite sufficient to compile your self-made kernel. |
内核一样有库,只是无法像用户空间库那样存在,您自己看看 linux-kernel 中的 lib 目录。
一个用户空间的软件,不使用任何库,不使用任何系统调用,特例存在,并且偶自己早些年真的那么玩过,为了看看绕过 内核 和 libc 能做什么。
您如果接触嵌入式开发用的板子,更容易理解,简单点,一般板子上有些 LED,控制用的管脚一般直接编址到内存特定地址特定位,对内存特定地址操作即可完成对 LED 的控制,用 c 可简单实现。
全面考虑问题 不是 钻牛角。
作者: 聚焦深空 发布时间: 2009-12-18
还“已经算是一个专业术语,有广泛使用”呢,洋人不过是随口一说,您就当宝似的拿来这里显摆,各位搜索一下"naked" cross-compiler就知道怎么回事!
现代多用户、多任务操作系统使用共享库技术,用户进程/程序使用同一组代码的,只需在内存/硬盘保留一个拷贝,用户进程的调度、切换由内核完成,用户操作硬件也需通过内核完成,因而有内核空间、用户空间之分。这就是说共享库、内核/用户空间这些概念仅存在于多用户、多任务操作系统中,而您硬要把一个无操作系统、直接操作硬件的嵌入式软件说成是不依赖任何库的用户空间软件,实在太荒谬可笑了,照你这个思路,DOS下很多软件也是“自包含”的哦
您不是在钻牛角尖就是在滥用概念
作者: 5000 发布时间: 2009-12-19
作者: 聚焦深空
内核一样有库,只是无法像用户空间库那样存在
|
我看你该补补操作系统的课了,好好看看这张操作系统的结构图,看看kernel在哪里,library在哪里
os.png (9.3 KB, 10 次查看) |
作者: 5000 发布时间: 2009-12-19
linux-kernel lib 目录下主要是内核空间使用的一些公共代码,提供如类似用户空间的 memset() 一类的函数,按偶的理解,属于库。
如果您认为只有用户空间二进制的 *.so *.a *.la 文件才算库,那是您的自由,对偶来说这些是二进制库文件。
说的是内核,您拿操作系统结构来偷换概念,不是很好笑么。
仇视洋文,并抵制洋文,只能说明您心胸狭隘。
人家对"裸编译器"使用范围是夸张些,无恶意,您不接受,笑笑不就够了。
不同人有不同看法观点,本是正常的,看您一直想努力说明只有自己正确,有必要么。
作者: 聚焦深空 发布时间: 2009-12-19
作者: 聚焦深空
人家对"裸编译器"使用范围是夸张些,无恶意,您不接受,笑笑不就够了。
不同人有不同看法观点,本是正常的,看您一直想努力说明只有自己正确,有必要么。 |
坛子里的某些人啊,基本功不扎实,却热衷于到新手的帖子里充高手,故弄玄虚地显摆一些“专业术语”,实际上是在传播些似是而非的“知识”
“内核一样有库”
“典型的自包含的例子是 linux-kernel freebsd-kernel ”
嵌入式软件是“自包含”的用户空间的软件
“"裸编译器"已经算是一个专业术语,有广泛使用”
这些非主流观点谁愿意接受就接受去吧
作者: 5000 发布时间: 2009-12-20
每个软件都能不依赖第三者而独立运行,不需要解决这个依赖那个依赖的问题,拿过来就能用,那该是多么畅快的事情。
作者: 飞龙在天 发布时间: 2009-12-20
作者: moolee 发布时间: 2009-12-21
至于裸编译器真的没听过.除非要把它静态编译
2.glibc的目的就是使 用户层可以使用内核的接口,
ko文件是内核,可以直接使用内核api,也可以使用glibc,但和ld-linux.so以及 动态库 无关,
3.比较支持 自包含的意思是---不依赖其他任何库.因为glibc本身是so,a自己根本不运行
作者: yueluck 发布时间: 2009-12-22
作者: yueluck
1.gcc需要glibc库.
至于裸编译器真的没听过.除非要把它静态编译 |
正常情况下,只有建立交叉编译器时,才能遇到 裸编译器,即 CLFS 中的 gcc-pass1。
可以人工建立 裸编译器,把正常 gcc 编译器搜索路径统统去掉即可,相当于把"库"做的衣服脱掉:
一个可以修改 specs;
一个可以使用命令行。
真实例子:编译 glibc 时,可以打开 Makefile 看 glibc 是怎么用命令行调用 裸编译器。
作者: yueluck
2.glibc的目的就是使 用户层可以使用内核的接口,
ko文件是内核,可以直接使用内核api,也可以使用glibc,但和ld-linux.so以及 动态库 无关, |
内核空间 与 用户空间 依靠硬件特性严格分离,您可以认为是基于安全考虑,内核空间权限在 root 用户之上,这也是为什么有那么多 rootkit 存在的根本原因。
常规情况,内核空间 和 用户空间 交流靠系统调用、设备文件,中介是 libc。
绕过 libc 是可行的,只是不经济,如前面提到的。
作者: yueluck
3.比较支持 自包含的意思是---不依赖其他任何库.因为glibc本身是so,a自己根本不运行
|
作者: 聚焦深空 发布时间: 2009-12-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28