GNU的strong symbol和weak symbol

Posted 立体风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GNU的strong symbol和weak symbol相关的知识,希望对你有一定的参考价值。

首先,同样的原型的两个函数在连个不同的c文件中都有定义,把这两个c文件编译、连接在一起,也没有什么错误。原因就是因为,gcc中有一个strong symbol和weak symbol的概念。默认函数定义都是strong symbol的,两个相同的strong symbol连接在一起,肯定会产生”symbol重复定义”的错误。

但是,这里我们将weak_symbol.c中的common_print加了weak属性,这样gcc再选择的时候优先选择strong symbol

2)      其次,根据例子程序执行的结果来看,执行了strong_symbol.c中的common_print函数。如果我们在strong_symbol.c中不提供common_print函数的实现,那么调用的就是weak_symbol.c中的实现。

3)      由上,我们可以想象,要用c语音提供一个api库的时候,我们可以把这些api都声明为weak属性的,作为一个default实现。当用户想要自己定制的时候,也就很容易实现了。glibc中的很多api就是这样设计的。

以上是关于GNU的strong symbol和weak symbol的主要内容,如果未能解决你的问题,请参考以下文章

iOS weak和strong的区别

__strong和__weak

iOS之weak和strong懒加载及循环引用

strong ,weak,copy关键字使用,及weak跟assign区别

iOS strong与weak的使用

Weak 和 Strong