2

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

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

W  lstat64

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

另外,我们将代码移植到gcc4.4.4,我们发现新的gcc并没有将函数标记为“弱”,而是将其标记为未定义?

为什么会有这种行为变化?

4

1 回答 1

3

根据GCC 文档


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

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

但在以后的版本中,GCC 会希望自己的版本lstat64具有优先权。

于 2019-03-13T11:07:36.623 回答