我们已经使用gcc4.1.2构建了代码,并且使用了函数“ lstat64”,该函数在“ sys / stat.h”系统头文件中定义,并且也在我们使用的第三方库中定义。
当我们“执行”可执行文件时,我们发现:
W lstat64
我的问题是:为什么gcc将其标记为弱函数?
此外,我们已将代码移植到gcc4.4.4,我们发现新gcc并未将功能标记为“弱”,而是将其标记为未定义?
为什么这种行为改变了?
答案 0 :(得分:2)
弱
弱属性导致声明以弱符号而不是全局符号的形式发出。 这主要用于定义可以在用户代码中覆盖的库函数,尽管它也可以与非函数声明一起使用。使用GNU汇编器和链接器时,ELF目标和a.out目标均支持弱符号。
在您的情况下,lstat64
在GCC 4.1.2中可能被标记为弱,因为这样就不会与第三方库函数冲突。 GCC可能希望这些外部功能具有优先权。
但是在更高版本中,GCC希望自己的lstat64
版本具有优先权。