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符号?应禁止同一目标文件中的相同符号,对吗? 谢谢 解决方法
实际上,相同符号的多个定义很好,并且可以以多种方式发生.其中一个(这里不是这种情况)是弱符号.
这里发生的是glibc动态链接器支持符号版本控制,glibc使用它.它从glibc 2.1导出一个版本的fopen,从glibc 2.0导出一个具有不同接口的向后兼容版本. 在动态链接时,应用程序可以选择特定版本或默认版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |