nm命令输出中的“@@”符号是什么意思?

4
我正在查看Linux中共享库的 'nm' 命令输出。我看到了这个:
U stderr@@GLIBC_2.0

这是否意味着stderr与glibc2.0硬链接?我问这个问题是因为我们有一组库(假设是a1.so,a2.so等),它们是根据不同版本的导出库(例如ex.so.1,ex.so.2)中的一个进行构建的。所有导出库都导出一个函数,比如说foo。当a*.so库被加载时,它们会以某种神奇的方式对它们所依赖的库中的适当函数进行修补。我看到了不同库的nm输出结果,如下所示。
nm a1.so | grep foo
U foo@@ex.1

nm a2.so | grep foo
U foo@@ex.2

在这里,'@@' 扮演什么角色?我找不到任何关于 '@@' 的文档。有任何参考资料将会很有帮助。

这是符号版本。像glibc这样的库可能包含同一符号的多个版本。 - n. m.
Ulrich Drepper的这篇论文的第3节详细介绍了更多内容。 - Brett Hale
感谢 @n.m. 和 Brett Hale。我会仔细阅读这篇论文。 - Chethan Ravindranath
1个回答

4
@ 允许指定符号的版本。当一个符号有多个定义时,它们会有不同的版本。为了表示默认版本,使用 @@。如果没有明确指定版本,则选择默认版本。
更多细节可以在 binutils VERSION documentation 中找到(搜索 "@@")。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接