理解ldd输出
ldd
如何知道它取决于libc.so.6
,而不是libc.so.5
或libc.so.7
?
libc.so.6 => /lib64/libc.so.6 (0x00000034f4000000)
/lib64/ld-linux-x86-64.so.2 (0x00000034f3c00000)
没有找到相关结果
已邀请:
2 个回复
稼悸
完成):
(还有一些关于elf如何在动态部分中存储信息的附加列。但是你可以看到libc.so.6由于SONAME而硬编码为
后缀) 甚至不了解ELF文件格式:
为了找到,链接器如何找到一个库(它在编译的最后一步完成),使用
选项
(这要求gcc将选项
传递给
):
链接器对
后缀一无所知,只是迭代所有试图打开
和
的库搜索目录,其中LIBNAME是
选项后的字符串。 (默认情况下添加
选项)。 第一次成功是
,它本身不是一个库,而是一个链接描述文件(文本文件)。以下是典型的
脚本的内容:
因此,脚本
比实际库更早发现,并且这个脚本说,将链接哪个文件,在这种情况下为
。 在更常见的情况下,
是某些版本的符号链接,例如
,并且在
中填充的SONAME字段对
链接不是对
,而是对
是对
的另一个符号链接。
名称将记录在二进制的NEEDED字段中。
徐百晴墓斜
结构有d_val union有效,并查找由DT_STRTAB表中的thi联合成员指定的偏移量,以查找此二进制文件/ SO所依赖的库的名称。