gpt4 book ai didi

c - 与静态库的弱链接

转载 作者:太空狗 更新时间:2023-10-29 15:34:02 27 4
gpt4 key购买 nike

我在 .c 文件中声明了一个带有 GCC weak 属性的外部函数:

extern int weakFunction( ) __attribute__ ((weak));

编译后的目标文件将 weakFunction 定义为弱符号。纳米的输出:

1791:         w weakFunction

我调用弱定义函数如下:

if (weakFunction != NULL)
{
weakFunction();
}

当我通过将目标文件定义为 GCC (gcc main.o weakf.o -o main.exe) 的参数来链接程序时,弱符号工作正常。如果我不链接 weakf.o,函数地址在 main.c 中为 NULL,函数将不会被调用。

问题是,当 weakf.o 在静态库中时,出于某种原因,链接器找不到函数,函数地址总是以 NULL 结尾。静态库是用ar创建的:ar rcs weaklibrary weakf.o

有人遇到过类似的问题吗?

最佳答案

虽然我不知道弱符号的确切工作原理,但看起来您得到了您所要求的:如果没有其他人强制 weakFunction() 存在,main() 也不会。对我来说,这是有道理的:如果您尝试编写的代码既可以使用设施 X 也可以不使用它,那么您不希望您的代码不惜一切代价强制将 X 包含在您的构建中。看起来“弱”的意思是询问是否某物存在,而不是请求某物存在。在您的情况下,也许您可​​以使用“-u weakFunction”作为链接器选项强制包含弱符号。

关于c - 与静态库的弱链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2627839/

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