我在Linux中查看共享库的'nm'命令的输出。 我看到这个
U stderr@@GLIBC_2.0
这是否意味着stderr是硬链接glibc2.0? 我问这个问题的原因是,我们有一套库(比如说a1.so,a2.so,…),它们是针对我们导出库的不同版本之一构build的(比如说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
“@@”在这里扮演什么angular色? 我找不到任何关于“@@”的文档。 任何参考将是有帮助的。
@
允许指定一个符号的版本。 当符号的多个定义存在时,它们将具有不同的版本。 要指示默认版本,请使用@@
。 如果未指定明确的版本,则选择默认版本。
更多细节可以在binutils VERSION文档中找到 (搜索“ @@
”)。