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

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

提问人:Chethan Ravindranath 提问时间:9/15/2016 更新时间:2/12/2023 访问量:1946

问:

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

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

C++ Linux 链接器 共享库 名称修改

评论

0赞 n. m. could be an AI 9/15/2016
这是符号版本。像 glibc 这样的库可能包含同一符号的多个版本。
0赞 Brett Hale 9/15/2016
乌尔里希·德雷珀 (Ulrich Drepper) 撰写的本文第 3 节更详细地介绍了这一点。
0赞 Chethan Ravindranath 9/16/2016
感谢 @n.m. 和 Brett Hale。我将浏览这篇论文。

答:

4赞 Sander De Dycker 9/15/2016 #1

允许指定符号的版本。当一个符号存在多个定义时,它们将具有不同的版本。为了指示默认版本,使用。如果未指定显式版本,则选择默认版本。@@@

更多细节可以在 binutils VERSION 文档中找到(搜索 “”)。@@