|
发表于 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提供的共享库。
库名字的后面就是这个库加载的地址。可以叫偏移地址,其实就是内存的高阶地址。 |
|