GNU的strong symbol和weak symbol
symbol GNU weak strong
2023-09-27 14:28:09 时间
首先,同样的原型的两个函数在连个不同的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就是这样设计的。
相关文章
- JS基础 Symbol 用于防止属性名冲突
- IDEA 最新版2022.3.2 创建Android新空项目时:Cannot resolve symbol ‘R‘错误原因和解决方法
- 解构赋值 和 symbol
- 内核加载模块时提示usb_common: exports duplicate symbol of_usb_get_dr_mode
- Undefined symbol xTaskGetCurrentTaskHandle (referred from stream_buffer.o) | STM32移植FreeRTOS编译代码报错
- 【Linux】编译内核模块和EXPORT_SYMBOL
- 【Linux】内核编程中的EXPORT_SYMBOL()
- Symbol Table
- HarmonyOS鸿蒙小问题解决Cannot resolve symbol ‘DependentLayout‘
- es6 Symbol
- EXPORT_SYMBOL机制
- 【stm32疑难杂症】:Error: L6218E: Undefined symbol TIM_Cmd (referred from timer.o).
- SVG 复用(defs、symbol、use)