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

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

本文关键字:符号 是什么 意思 nm 输出 命令      更新时间:2023-10-16

我正在查看Linux中共享库的'nm'命令的输出。我看到这个

U stderr@@GLIBC_2.0

这是否意味着stderr是硬链接的glibc2.0?我问这个问题的原因是我们有一组库(假设是a1。所以,a2。因此,…),它们是根据我们导出的库的不同版本之一构建的(让我们说ex.so.)。1、ex.so.2)。导出的库都导出一个函数,比如foo。当a*。库被加载后,它们以某种神奇的方式在它们所依赖的库中修补相应的函数。我看到nm对不同库的输出如下所示:

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

"@@"在这里起什么作用?我找不到任何关于"@@"的文档。任何参考资料都会有帮助的。

@允许指定一个符号的版本。当一个符号有多种定义时,它们就会有不同的版本。默认版本为"@@"。如果未指定显式版本,则选择默认版本。

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