LinuxSir.cn,穿越时空的Linuxsir!

用户名  找回密码
 注册
搜索
热搜: shell linux mysql
楼主: vanhu

LFS工具链构建的几个问题

[复制链接]
发表于 2006-3-3 14:12:00 | 显示全部楼层
斑竹指的是那个老问题吧
为什么安装了gcc-4还要gcc-3?的确忘了考虑:)
唉,有时候就是不尽人意。
回复 支持 反对

使用道具 举报

发表于 2006-3-3 14:17:16 | 显示全部楼层
我没说那个问题。。。那个分开就可以了。。但是 openssl 是基础库,最好只有一个,当时就郁闷的我不行,,结果还是选择了 0.9.7。呵呵。。
回复 支持 反对

使用道具 举报

发表于 2006-3-3 18:37:07 | 显示全部楼层
3。lib本身的问题
这个你没有提到。不过你有没有想过,一个系统上怎么会同时出现两个一摸一样的库呢?在所有的搜索路径中,都不会存在提供同一个功能的库。也就是说ld在链接时,文件系统里面只有一个.so与之对应!不然不是画蛇添足嘛?出于版本考虑,老版本也不应该和新版本并存!作为研究,可以随便考虑,真正的应用,这些都不是问题:)所以我没有去验证他们


两个同样版本,功能的库是有理由共存的:
我这里:
/usr/lib/ati/libGL.so.1.2
/usr/X11R6/lib/libGL.so.1.2
一个是 fglrx 所带, 一个是mesa所带. 接口,功能都一样,就是实现不同.
我用两个 xorg.conf , xorg.conf.fglrx xorg.conf.radeon ,用一个脚本改变 xorg.conf , 改变 ld.so.conf ,达到选择不同驱动的目的.
回复 支持 反对

使用道具 举报

发表于 2006-3-3 19:58:29 | 显示全部楼层
明显是你认为的原因嘛:)
比如我有两个桌面等等。。。
是有存在的可能性,什么不合常规的做法都是可以出现的,我说的是通常。
比如在linux的发行版本中,不会提供2个gcc
但是BLFS就不是通常的,确实并存的2个gcc.

我那样描述,只是为了给lz一个更好的考虑环境。如果总是放的那么开,就不容易得到答案了:)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-3 21:15:51 | 显示全部楼层
Post by yyccrasher
我觉得,动态链接的话,肯定不能用偏移来作为寻找代码的方式,因为不可能每个系统上库上相同函数的偏移都一样,这样所有的软件都必须下源码编译,预编译之类的二进制文件肯定没法用的吧……


嗯,有道理。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-3 21:27:52 | 显示全部楼层
关于ld:
Post by 终极幻想
不指定的话,是去 /lib:/usr/lib 这2个目录找。
配置文件是 ld.so.conf,在 glibc 安装的时候包括。


关于ld-linux.so.2:
Post by 终极幻想
默认的话,就是 先找 ld.so.conf,再找 /lib:/usr/lib。

指定了 LIB_PATH 的话,就是先找 ld.so.conf,再找 LIB_PATH。就是把 /lib:/usr/lib 用 LIB_PATH 替换了。


哦,那也就是说ld和ld-linux.so.2用的是同一套搜索方法,这样就对了。但是还是有一个问题,就是LIB_PATH只在configure binutils的时候指定,而在编译glibc的过程中并没有指定。而ld-linux.so.2是glibc中的,那glibc是怎么知道我们在configure binutils的时候指定的LIB_PATH呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-3 21:37:47 | 显示全部楼层
Post by good02xaut
1。静态链接器ld


除了ld的搜索路径,我还很想知道的是ld和ld-linux.so.2是如何协同工作的,其实我的三个问题都是围绕这一点的。也就是ld到底在连接阶段在二进制文件中写入了哪些在执行时调用动态链接库时必要的信息(肯定和系统中实际存在的库有关,而不仅仅是在二进制文件中写入了程序调用的外部函数的名字,不然指定LIB_PATH就没用了),而ld-linux.so.2又是如何根据这些信息,去完成程序和库函数的连接的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-3 21:40:57 | 显示全部楼层
Post by good02xaut
3。lib本身的问题
这个你没有提到。不过你有没有想过,一个系统上怎么会同时出现两个一摸一样的库呢?在所有的搜索路径中,都不会存在提供同一个功能的库。也就是说ld在链接时,文件系统里面只有一个.so与之对应!不然不是画蛇添足嘛?出于版本考虑,老版本也不应该和新版本并存!作为研究,可以随便考虑,真正的应用,这些都不是问题:)所以我没有去验证他们


host的glibc和LFS的glibc不就是两个功能一样的库吗?
回复 支持 反对

使用道具 举报

发表于 2006-3-4 02:07:19 | 显示全部楼层
Post by good02xaut
明显是你认为的原因嘛:)
比如我有两个桌面等等。。。
是有存在的可能性,什么不合常规的做法都是可以出现的,我说的是通常。
比如在linux的发行版本中,不会提供2个gcc
但是BLFS就不是通常的,确实并存的2个gcc.

我那样描述,只是为了给lz一个更好的考虑环境。如果总是放的那么开,就不容易得到答案了:)


到觉得好像这个做法经常见的啊。2个gcc是不多,主要是发行版的gcc比较旧,所以装一个就够了,没有那些兼容的麻烦。

但是2个桌面的就很多。发行版哪个不提供 gnome 和 kde?不过这个不存在库的重复问题。说一个重复的。

/lib/libc-2.3.6.so 和 /lib/tls/libc-2.3.6.so
两个可以是重复的库,但是有不同的特征的。其实和那个 flgrx 的那个道理一样。。
回复 支持 反对

使用道具 举报

发表于 2006-3-4 02:09:10 | 显示全部楼层
Post by vanhu
关于ld:


关于ld-linux.so.2:


哦,那也就是说ld和ld-linux.so.2用的是同一套搜索方法,这样就对了。但是还是有一个问题,就是LIB_PATH只在configure binutils的时候指定,而在编译glibc的过程中并没有指定。而ld-linux.so.2是glibc中的,那glibc是怎么知道我们在configure binutils的时候指定的LIB_PATH呢?


glibc 用到哪个 ld,那就用那个 ld 的LIB_PATH。

参见 glibc 第一次build:

../glibc-2.3.6/configure --prefix=/tools \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0[color="Red"] --with-binutils=/tools/bin \
    --without-gd --with-headers=/tools/include \
    --without-selinux

glibc 是把工作交给ld 的,自己不做。
回复 支持 反对

使用道具 举报

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

本版积分规则

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