弱连接的便携性如何? #pragma weak my_symbol
-
05-07-2019 - |
题
弱连接的可移植性如何?
#pragma weak my_symbol
我看到了这个问题:怎么做 - 弱 - 链接 - 工作与gcc 讨论如何使其工作。但有没有一个很好的方法来做到这一点,不需要gcc?
弱链接和用#ifdef保护声明有什么区别?
#ifndef my_weak_fn
void my_weak_fn(){/* Do nothing */ return;}
#endif
解决方案
根据定义,
#pragma
是不可移植的。
弱链接在链接时完成(令人惊讶的是)。它允许具有相同签名的函数(或任何符号,实际上)覆盖另一个。这意味着将选择一个强者而不是弱者,但如果没有强者,将使用弱者。
包含防护是由编译器完成的,而不是链接器,如果强者没有,那么他们不允许回退到弱者。如果你控制两个函数的源代码,你可以模拟相同的行为(通过 ifdef
-ing为一个, ifndef
-ing为另一个),但情况并非总是如此,这是两个强大功能之间的更多选择。
弱链接允许您执行诸如放入自己的 malloc()/ free()
以进行调试,同时仍然链接到提供它们的库。
不隶属于 StackOverflow