gpt4 book ai didi

c - XC8 编译器是否支持弱符号?

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:55 26 4
gpt4 key购买 nike

gcc 有 __attribute__((weak)) 允许创建弱符号,例如函数。这允许用户重新定义函数。我希望在 XC8 中有相同的行为。

更多信息:

我正在为 XC8 编写驱动程序,我想将低级初始化委托(delegate)给用户定义的函数。

我知道可以重新定义一个函数:在 XC8 的源文件中实现了 putch 函数,它被 printf 函数调用。允许用户在他的应用程序中重新实现 putch。有两个同名函数,但没有报错。

putch在XC8的源文件中的实现有一个注释说“弱实现。可能需要用户实现”,所以它必须是可能的。

我在XC8的用户指南中查看了pragmas,但没有与此问题相关的指令。

最佳答案

链接器只会搜索静态库来解析输入目标文件尚未解析的符号,因此可以在没有弱链接的情况下替换静态库函数。弱链接对于作为源代码或目标代码而不是作为静态库提供的代码很有用。

因此,如果不支持弱链接指令,您可以为“弱”符号创建一个静态库并链接它。

XC8 manual记录 IAR 兼容性指令 __weakweak pragma 的行为,在这两种情况下指令都被忽略(仅在 XC16 和 XC32 中支持),因此您必须使用上面建议的方法,无论如何都更便携 - 如果有些不方便。

putch() 的情况下,我怀疑这并没有像您认为的那样工作。我想这根本不是弱联系的问题;在包含 printf() 的静态库中,存在指向 putch() 的未解析链接,链接器会根据您提供的内容解析它;如果您要从源代码编译和链接 Microchip 实现和您自己的实现,则会出现链接器错误;同样,如果您不提供任何实现,您将收到链接器错误。

关于c - XC8 编译器是否支持弱符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44075604/

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