【问题标题】:How portable is weak linking? #pragma weak my_symbol弱链接的便携性如何? #pragma 弱 my_symbol
【发布时间】:2023-07-31 09:39:01
【问题描述】:

弱链接的可移植性如何?

#pragma weak my_symbol

我看到了这个问题:how-to-make-weak-linking-work-with-gcc 讨论了如何让它工作。但是有没有一种不需要 gcc 的好方法呢?

弱链接和用#ifdef 保护声明有什么区别?

#ifndef my_weak_fn
    void my_weak_fn(){/* Do nothing */ return;}
#endif

【问题讨论】:

    标签: c gcc linker portability weak-linking


    【解决方案1】:

    #pragma 根据定义,不是可移植的。

    弱链接是在链接时完成的(令人惊讶的是)。它允许具有相同签名的函数(或任何符号,实际上)覆盖另一个。这意味着将优先选择强者而不是弱者,但如果没有强者,则会使用弱者。

    包含保护由编译器完成,而不是链接器,并且它们确实允许在强项不存在时回退到弱项。如果您控制两个函数的源,则可以模拟相同的行为(一个是ifdef-ing,另一个是ifndef-ing),但情况并非总是如此,这更多是在两个强大的函数之间进行选择。

    弱链接允许您执行一些操作,例如放入自己的 malloc()/free() 以进行调试,同时仍与提供它们的库进行链接。

    【讨论】:

      最近更新 更多