LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: lofeng410

请教几个小问题

[复制链接]
 楼主| 发表于 2008-10-24 12:13:25 | 显示全部楼层
发觉LIVE CD建立的环境不是很稳定可靠
现在6个终端被我给弄死了5个,Ctrl+C什么的都不行
赶紧用第6个终端reboot,结果敲入命令后也死在那了
回复 支持 反对

使用道具 举报

发表于 2008-10-24 14:35:28 | 显示全部楼层
那估计是你误操作删除了系统文件了。重启电脑吧。

如果是硬盘系统的话,早挂了,要重装了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 16:08:52 | 显示全部楼层
5.7第一次调整工具链时修正specs文件,使它指向新的动态链接器/tools/lib/ld-linux.so.2。这个修正使得在接下来的编译生成的程序都将使用新的动态链接器/tools/lib/ld-linux.so.2,而第一次生成的GCC运行时还是需要host中的/lib/ld-linux.so.2。
因为ldd /tools/bin/gcc 可知其使用的动态链接器是host中的/lib/ld-linux.so.2
因此调整了库的搜索路径后,还是需要重新编译GCC、Binutils,使其纯正。
个人觉得这时第二次编译GCC、Binutils的主要缘故,不知可对,还请斧正。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 16:12:27 | 显示全部楼层
可执行文件中总是把动态链接器的绝对地址编码进去,这个最可恨

[color="Red"]而这个硬编码进去的动态链接器又决定了它搜寻库的路径和顺序
回复 支持 反对

使用道具 举报

发表于 2008-10-24 16:15:12 | 显示全部楼层
是的,非常正确!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 16:24:39 | 显示全部楼层
ldd /usr/bin/gcc
输出为:
linux-gate.so.1=>(0x......)
libc.so.6=>/lib/libc.so.6(0x......)
/lib/ld-linux.so.2(0x......)
------------------------------------------------------------------------------------------------------------------------------------
这个输出有点看不懂,最后一行还好明白,直接显示绝对地址和偏移地址(括号里面的应该是偏移地址的吧)。
第一行没有显示什么地址,是否就是直接去相应的lib中(也就是ld.so.cache中去寻找)搜索linux-gate.so.1?
第二行中包含的地址又是什么含义呢?不会是直接包含到可执行文件中去的吧?

另外,有路径的意味着只要在那个位置存在那个文件,就一定能够找到。而没有路径的,有事按照什么样的方式去搜索呢?
回复 支持 反对

使用道具 举报

发表于 2008-10-24 16:56:32 | 显示全部楼层
Post by lofeng410;1898679
ldd /usr/bin/gcc
输出为:
linux-gate.so.1=>(0x......)
libc.so.6=>/lib/libc.so.6(0x......)
/lib/ld-linux.so.2(0x......)
------------------------------------------------------------------------------------------------------------------------------------
这个输出有点看不懂,最后一行还好明白,直接显示绝对地址和偏移地址(括号里面的应该是偏移地址的吧)。
第一行没有显示什么地址,是否就是直接去相应的lib中(也就是ld.so.cache中去寻找)搜索linux-gate.so.1?
第二行中包含的地址又是什么含义呢?不会是直接包含到可执行文件中去的吧?

另外,有路径的意味着只要在那个位置存在那个文件,就一定能够找到。而没有路径的,有事按照什么样的方式去搜索呢?


ldd显示的是程序的“共享库”内容。

Linux下,每个程序要运行,都需要三个条件:
1、二进制文件bin
2、库文件lib
3、配置文件etc

其中,库文件分两种,一种是“静态”库,这种库只有二进制文件自己使用。这种库的后缀为.a

另一种是共享库,这种库其他的二进制文件都可以使用。这种库的后缀为.so。

像上面的命令,打印出来的就是gcc程序用到的共享库。
第一个是Linux门,它是Linux内核与用户程序连接的库。
第二个是Glibc提供的一个共享库。
第三个是ld提供的共享库。

库名字的后面就是这个库加载的地址。可以叫偏移地址,其实就是内存的高阶地址。
回复 支持 反对

使用道具 举报

发表于 2008-10-24 16:57:53 | 显示全部楼层
这些库文件的知识,在BLFS手册中会提到。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 17:49:16 | 显示全部楼层
Post by ti8er;1898704
ldd显示的是程序的“共享库”内容。

Linux下,每个程序要运行,都需要三个条件:
1、二进制文件bin
2、库文件lib
3、配置文件etc

其中,库文件分两种,一种是“静态”库,这种库只有二进制文件自己使用。这种库的后缀为.a

另一种是共享库,这种库其他的二进制文件都可以使用。这种库的后缀为.so。

像上面的命令,打印出来的就是gcc程序用到的共享库。
第一个是Linux门,它是Linux内核与用户程序连接的库。
第二个是Glibc提供的一个共享库。
第三个是ld提供的共享库。

库名字的后面就是这个库加载的地址。可以叫偏移地址,其实就是内存的高阶地址。

还是没有理解为什么有的有绝对路径、而有的没有?
回复 支持 反对

使用道具 举报

发表于 2008-10-24 17:52:47 | 显示全部楼层
Post by lofeng410;1898743
还是没有理解为什么有的有绝对路径、而有的没有?


我也不知道……
我觉得是风格问题。比如没有绝对路径的,表示系统级别;
有绝对路径的,表示用户程序级别。

这有点像C语言程序变量在前面加一个或者两个下划线一样。
回复 支持 反对

使用道具 举报

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

本版积分规则

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