当符号是glibc

时间:2019-07-14 19:43:41

标签: c linux linker glibc

我在Linux上编译了使用printf的代码,并且发现在编译(gcc -c时,该符号保留为printf,但在我进行编译和链接时({{ 1}}),我看到符号变为gcc -o。 glibc中的其他符号也会发生这种情况。

链接器会更改符号,以便仅在与一个版本的glibc而非其他版本链接时才起作用吗?

1 个答案:

答案 0 :(得分:2)

  

链接器会更改符号,以便仅在与一个版本的glibc而非其他版本链接时才起作用吗?

否。

要了解此处发生的情况,您需要了解GNU versioned symbols

除了极少数例外,GLIBC保持向后兼容性(当运行时GLIBC的版本与链接该程序的版本相同或更高时,旧程序将继续运行)。

如果使用printf@GLIBC.2.2.5,则printf的ABI会在2002年前的某个时间(2002年1月20日的GLIBC-2.2.5 was released)发生变化,此后一直没有变化。此后,您的二进制文件将与GLIBC的任何版本一起使用(对于该特定符号;您可能正在使用需要较新GLI​​BC的其他符号)。