gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:09:01 25 4
gpt4 key购买 nike

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

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

W  lstat64

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

另外,我们已经将我们的代码移植到gcc4.4.4,我们发现新的gcc并没有将函数标记为“weak”,而是标记为undefined?

为什么会发生这种行为变化?

最佳答案

根据 GCC documentation :

weak
The weak attribute causes the declaration to be emitted as a weak symbol rather than a global. This is primarily useful in defining library functions which can be overridden in user code, though it can also be used with non-function declarations. Weak symbols are supported for ELF targets, and also for a.out targets when using the GNU assembler and linker.

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

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

关于c - 为什么 gcc 可以自动将符号标记为弱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55139165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com