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 中找到更多详细信息(搜索“@@
”)。
我正在查看 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 中找到更多详细信息(搜索“@@
”)。