标签:name-mangling linker shared-libraries linux c-4
我正在查看Linux中共享库的’nm’命令的输出.我看到这个
U stderr@@GLIBC_2.0
这是否意味着stderr被硬链接到glibc2.0?我问这个原因的原因是,我们有一组库(例如a1.so,a2.so,…)是针对我们导出的库的一个不同版本(例如ex.so.1,例2).导出的库都导出一个函数,例如foo.加载a * .so库时,它们以某种方式神奇地修补了针对其构建的库中的适当功能.我看到了如下所示不同库的nm输出.
nm a1.so | grep foo
U foo@@ex.1
nm a2.so | grep foo
U foo@@ex.2
“ @@”在这里扮演什么角色?我找不到有关“ @@”的任何文档.任何参考将有所帮助.
解决方法:
@允许指定符号的版本.当一个符号存在多个定义时,它们将具有不同的版本.为了表示默认版本,使用@@.如果未指定显式版本,则选择默认版本.
可以在binutils VERSION documentation(搜索“ @@”)中找到更多详细信息.
标签:name-mangling,linker,shared-libraries,linux,c-4 来源: https://codeday.me/bug/20191118/2026170.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。