LinuxSir.cn,穿越时空的Linuxsir!

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

关于LFS制作过程中的讨论(初学者的几个问题)

[复制链接]
发表于 2008-4-13 15:28:22 | 显示全部楼层 |阅读模式
我是初学者,此前按照youbest的<<[原创]第二版 手把手教你如何建立自己的Linux系统(LFS速成手册)>>手工敲了一遍,LFS可以运行正常,很是兴奋。但是在后来理解制作过程的时候有几个问题无法理解。我的参考手册是LFS-6.2中文版。

a、ld-linux.so.2是在编译哪个包的时候生成的呀???
   应该是在编译glic的时候生成的吧,不知道对不对,在LFS手册中一直也没有找到明确的说法,所以想先确认一下。

b、关于动态加载库ld-linux.so.2。gcc到底使用的哪个ld-linux.so.2的问题。
    我想gcc在编译软件包的时候使用的是哪个ld-linux.so.2应该是在gcc的spec文件中决定的吧!
    如果是的话,那么在LFS手册第五章第二遍编译gcc的时候,关于打补丁patch -Np1 -i ../gcc-3.4.3-specs-2.patch 后有这么一段注释就觉得有点问题了?
    摘录如下:“现在预先打补丁而不是在安装 GCC 之后调整 specs 文件可以保证新的动态连接器在编译 GCC 的时候就用上。也就是说,随后的所有临时程序都会连接到新的 Glibc 上。”
    我对注释的理解:他说"在编译 GCC 的时候就用上"是不是就是在说在此处编译gcc_2(_2表示第二编要编译的gcc)的时候也是需要ld-linux.so.2的,打这个补丁就是要让编译gcc_2时使用/tools/下的ld-linux.so.2而不是宿主系统的。
    我的问题:在这里第二遍编译gcc_2用的编译器应该就是第一遍编译所得的gcc_1吧,而第一遍的gcc_1的spec文件中关于ld-linux.so.2在前面已经修改过了(即从/libld-linux.so.2=>/tools/libld-linux.so.2)呀。那么这里打这个补丁,对于ld-linux.so.2不是已经没有什么意义了呀???那么注释中所说的"保证新的动态连接器在编译 GCC 的时候就用上"不就是没有必要了吗???不知道理解的对不对???

c、还是关于ld-linux.so.2。是ld-linux.so.2如何搜索动态库的问题。
    在精华贴中有一片关于<<关于库的深入思考[探讨原创]>>中的大概在首贴的1/3处有一段关于ld-linux.so.2使用的哪个配置文件ld.so.conf的说明。
    摘录: "正常情况下的ld-linux.so.2都是使用/etc/ld.so.conf作为路径搜索配置文件的,但是这句话只是在大多数情况下是正确的,是否是这个文件由ld-linux.so.2决定.如过你的LFS中的第一遍工具链/tools还在的话,
strings /tools/lib/ld-linux.so.2|grep etc
输出很可能是/tools/etc/ld.so.cache.那么它用的哪个文件我们就清楚了吧.
可这个路径前面的/tools到底和什么有关呢?首先我们可能会想到与ld-linux所在的位置有关.还好我们有3套glib,感谢LFS,现在我们拿第二遍的工具链下手.假设我们的LFS在/lfsroot
strings /lfsroot/lib/ld-linux.so.2
很奇怪的是输出竟然是/etc/ld.so.cache! 那这到底和什么有关呢,没错就是我们编译时候的--prefix有关.就是我们编译ld-linux.so.2时候的--prefix有关。"
    我的理解:就是说ld-linux.so.2用哪个ld.so.conf,就是看编译ld-linux.so.2时候的--prefix的。那么配置文件就是/prefix/etc/ld.so.conf吧???(不知道对不对)
    我的问题:如果上面理解没有错的话,那么就搞不清了。在第6章安装LFS系统的时候在编译glibc的时候,用的"configure --prefix=/usr " 那岂不是在告诉ld-linux.so.2用/usr/etc/ld.so.conf吗???而usr/下是没有这个配置文件的呀。而且显然ld-linux.so是安装在/lib目录下的,用的肯定也是/etc/ld.so.conf。那么不知道--prefix=/usr有没有影响到ld-linux.so,而这又是怎么回事呢?

d、关于第6章中安装LFS软件包的问题。
   看到安装的过程中,大部分软件包的在configure 的时候都使用了--prefix=/usr,那么是不是就是在说软件包要安装到/usr/bin和/usr/lib目录下去呀???。包括glibc也是使用了--prefix=/usr。
   我的问题:
   1〉以--prefix=/usr开头是不是就是再说软件包要以/usr为安装目录? 有一些核心软件为什么也要安装到/usr下呢,想glibc等。
   2〉但是在后来做好的LFS系统中的根目录下的/lib下好像也有很多的库文件,这些是在哪里来的呀。我看了一遍的LFS的制作过程,好像没有往/lib下安装的命令呢?
发表于 2008-4-14 19:43:16 | 显示全部楼层
a、ld-linux.so.2确实是glibc的一部分。
b、主要的目的,是要第二遍生成的GCC使用之前生成的ld-linux.so.2而不是宿主的ld-linux.so.2作为动态连接器。第一遍gcc用的是宿主的。
c、由于标准的配置下,总是需要安装一些库文件到/usr/lib而另一些到/lib下,因此如果--prefix=/usr,ld-linux.so.2就会装在/lib下。为了修改这个行为,在multilib下需要利用echo "slibdir=/lib64" > configparms 来更改这个目录。但是如果为--prefix设置了其它的值,就不会有东西装在/lib下。
d、请参考c。某些库由于历史原因,一直是放在/lib下的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-15 09:22:56 | 显示全部楼层
非常感谢!
c、那么是不是就是说 --prefix=/usr并不是通常意义上所讲的把程序安装在/usr下的意思,而是一个标准配置的标识,即让ld-linux.so按照标准路径来安装。这样的话ld-linux.so的就会装在标准的/lib下了,自然也就使用/etc/ld.so.conf了。如果为--prefix设置了其它的值,就不会有东西装在/lib下。
回复 支持 反对

使用道具 举报

发表于 2008-4-22 06:26:58 | 显示全部楼层
glibc 是比较特殊的包,一般来说 prefix 的都限定了安装路径的,就是 prefix。

我太久没看lfs了,细节实在有点记不请了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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