c - 弱链接的可移植性如何? #pragma weak my_symbol

标签 c gcc linker portability weak-linking

弱链接的可移植性如何?

#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

最佳答案

#pragma 根据定义不可可移植。

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

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

弱链接允许你做一些事情,比如为了调试目的而放入你自己的 malloc()/free(),同时仍然与提供它们的库链接。

关于c - 弱链接的可移植性如何? #pragma weak my_symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410811/

相关文章:

c - 在 C 中递归地打印 Linux 中路径中的所有文件和文件夹

CMake 子目录库和主项目

无法使 libc 覆盖功能与 LD_PRELOAD 一起使用?

c - 为什么ld的输出二进制无法执行?

c++ - 在 leveldb 的包装类中链接静态方法

c - 文件内容不会读入结构

c - lhash 在 C - Linux 中的 lh_insert 上崩溃?

python - numpy 数组 C api

c - 为什么仅在将变量传递给 '-lm' 函数时才显式使用 'math.h'?

c++ - 创建文件会中断 Makefile for C++ 中的 -DDEBUG 标志