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

What does the '@@' symbol mean in the output of nm command?

我正在查看 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

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

@ 允许指定符号的版本。当一个符号的多个定义存在时,它们会有不同的版本。要指示默认版本,使用 @@。如果未指定明确版本,则选择默认版本。

可以在 binutils VERSION documentation 中找到更多详细信息(搜索“@@”)。