什么是' @@'符号表示在nm命令的输出中?

时间:2016-09-15 09:41:20

标签: c++ linux linker shared-libraries name-mangling

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

U stderr@@GLIBC_2.0

这是否意味着stderr与glibc2.0硬连接?我问这个问题的原因是我们有一组库(让我们说a1.so,a2.so,...)是针对我们导出的库的一个不同版本构建的(让&# 39; s表示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

' @@'在这里玩?我找不到关于' @@'的任何文件。任何参考资料都会有所帮助。

1 个答案:

答案 0 :(得分:3)

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

更多详细信息,请参阅binutils VERSION documentation(搜索" @@")。