弱连接的便携性如何?#pragma weak my_symbol

Jef*_*ffV 2 c linker portability gcc weak-linking

弱连接的便携性如何?

#pragma weak my_symbol
Run Code Online (Sandbox Code Playgroud)

我看到了这个问题: 如何制作 - 弱 - 链接 - 工作与gcc讨论如何使其工作.但有没有一个很好的方法来做到这一点,不需要gcc?

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

#ifndef my_weak_fn
    void my_weak_fn(){/* Do nothing */ return;}
#endif
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 13

#pragma根据定义,它不是便携式的.

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

包含防护是由编译器完成的,而不是链接器,如果强者没有,它们不允许回退到弱者.如果你控制两个函数的源代码,你可以模拟相同的行为(通过ifdef一个函数,另一个函数ifndef),但情况并非总是如此,这是两个强函数之间的更多选择.

弱链接允许您执行诸如自己malloc()/free()进行调试之类的操作,同时仍然链接到提供它们的库.