为什么gcc可以自动将符号标记为弱

时间:2019-03-13 10:06:52

标签: c linux gcc weak-linking

我们已经使用gcc4.1.2构建了代码,并且使用了函数“ lstat64”,该函数在“ sys / stat.h”系统头文件中定义,并且也在我们使用的第三方库中定义。

当我们“执行”可执行文件时,我们发现:

W  lstat64

我的问题是:为什么gcc将其标记为弱函数?

此外,我们已将代码移植到gcc4.4.4,我们发现新gcc并未将功能标记为“弱”,而是将其标记为未定义?

为什么这种行为改变了?

1 个答案:

答案 0 :(得分:2)

按照GCC documentation

  


  弱属性导致声明以弱符号而不是全局符号的形式发出。 这主要用于定义可以在用户代码中覆盖的库函数,尽管它也可以与非函数声明一起使用。使用GNU汇编器和链接器时,ELF目标和a.out目标均支持弱符号。

在您的情况下,lstat64在GCC 4.1.2中可能被标记为弱,因为这样就不会与第三方库函数冲突。 GCC可能希望这些外部功能具有优先权。

但是在更高版本中,GCC希望自己的lstat64版本具有优先权。