加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 为什么/lib32/libc.so.6中有两个“fopen”符号?

发布时间:2020-12-14 01:29:51 所属栏目:Linux 来源:网络整理
导读:nm -D /lib32/libc.so.6 | grep 'fopen'0005d0c0 T fopen00109750 T fopenreadelf -s /lib32/libc.so.6 | egrep '0005d0c0|00109750'181: 0005d0c0 50 FUNC GLOBAL DEFAULT 12 fopen@@GLIBC_2.1182: 00109750 136 FUNC GLOBAL DEFAULT 12 fopen@GLIBC_2.06
nm -D /lib32/libc.so.6 | grep '&;fopen&;'
0005d0c0 T fopen
00109750 T fopen

readelf -s  /lib32/libc.so.6 | egrep '0005d0c0|00109750'
181: 0005d0c0    50 FUNC    GLOBAL DEFAULT   12 fopen@@GLIBC_2.1
182: 00109750   136 FUNC    GLOBAL DEFAULT   12 fopen@GLIBC_2.0
679: 0005d0c0    50 FUNC    GLOBAL DEFAULT   12 _IO_fopen@@GLIBC_2.1
680: 00109750   136 FUNC    GLOBAL DEFAULT   12 _IO_fopen@GLIBC_2.0

这是我的问题:

>为什么/lib32/libc.so.6中有两个fopen符号?应禁止同一目标文件中的相同符号,对吗?
>为什么readelf -s转出fopen @@ GLIBC_2.1和fopen@GLIBC_2.0而不是fopen?

谢谢

解决方法

实际上,相同符号的多个定义很好,并且可以以多种方式发生.其中一个(这里不是这种情况)是弱符号.

这里发生的是glibc动态链接器支持符号版本控制,glibc使用它.它从glibc 2.1导出一个版本的fopen,从glibc 2.0导出一个具有不同接口的向后兼容版本.

在动态链接时,应用程序可以选择特定版本或默认版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读