nm命令的输出中'@@'符号的含义是什么?
问题描述:
我正在查看Linux中共享库的'nm'命令的输出。我看到这nm命令的输出中'@@'符号的含义是什么?
U [email protected]@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 [email protected]@ex.1
nm a2.so | grep foo
U [email protected]@ex.2
'@@'在这里扮演什么角色?我找不到有关'@@'的任何文档。任何参考将有所帮助。
答
@
允许指定符号的版本。当存在符号的多个定义时,它们会有不同的版本。要指示默认版本,请使用@@
。如果未指定明确的版本,则选择默认版本。
更多细节可在binutils VERSION documentation(搜索“@@
”)中找到。
这是符号版本。像glibc这样的库可能包含同一个符号的多个版本。 –
Ulrich Drepper撰写的[this]第3部分(https://www.akkadia.org/drepper/dsohowto.pdf)论文更详细地介绍。 –
谢谢@n.m。和Brett Hale。我将通读论文。 –