什么是weak symbol?
"V" The symbol is a weak object. When a weak defined symbol is linked with a normal defined symbol, the normal defined symbol is used with no error. When a weak undefined symbol is linked and the symbol is not defined, the value of the weak symbol becomes zero with no error.
说的是动态库中的weak symbol,缺省会被normal symbol替代,如果没有定义,则该symbol的值为0。
很抽象,是不是,我一直想找一个简单的例子。
最近看过一篇文章:
http://www.cs.virginia.edu/~wh5a/blog/2006/07/20/the-weak-attribute-of-gcc/
终于对所谓的weak symbol有了一点了解。
http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Function-Attributes.html
讲了__attribute__的语法。
extern void foo() __attribute__((weak));
if (foo) foo();
}
程序居然能够编译通过,甚至成功执行!让我们来看看是为什么?
首先声明了一个符号foo(),属性为weak,但并不定义它,这样,链接器会将此未定义的weak symbol赋值为0,也就是说foo()并没有真正被调用,试试看,去掉if条件,肯定core dump!
extern void foo() ;
if (foo) foo();
}
这个是一般程序,编译过不了:
strong.c: undefined reference to `foo'
【foo.c】
void foo() {
printf("in foo./n");
}
OK!
linux:~/test/weak # nm weak.o
w foo
00000000 T main
linux:~/test/weak # nm foo.o
00000000 T foo
U printf
链接时,前面那个weak symbol会被后面这个代替,如果没有链接foo.o,也没问题,对应符号为0。
`W' The symbol is a weak symbol that has not been specifically tagged as a weak object symbol. When a weak defined symbol is linked with a normal defined symbol, the normal defined symbol is used with no error. When a weak undefined symbol is linked and the symbol is not defined, the value of the weak symbol becomes zero with no error.
什么是weak symbol?相关推荐
- 关于GCC属性中的弱符号(weak symbol)
关于弱符号的解释: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误.链接器会忽略弱符号,去使用普通的全局符号来解析 ...
- C++ inline weak symbol and so on
关于inline这个关键字,听到强调得最多的是,它只是一种对于编译器的建议,而非强制执行的限定. 但事实上,即使这个优化最终由于函数太过复杂的原因没有达成,加上inline关键字(还有在类定义中直接定 ...
- ARM 之十一__weak 和 __attribute__((weak)) 关键字的使用
今天在使用 Keil (主要是 armcc 编译器)编译代码(华大的 MCU 驱动库hc32f46x_interrupts.h / c)的时候遇到了有 __weak 关键字的函数不起作用的问题,甚 ...
- __attribute__ 之weak,alias属性
Weak Alias 跟 Weak Reference 完全没有任何关系,不过是我在看到 Weak Reference 的时候想到的而已. Weak Alias 是 gcc 扩展里的东西,实际上是函数 ...
- Keil-MDK 中 [WEAK] 的作用
转自:http://blog.csdn.net/kissmonx/article/details/21622187 一句话:标记__weak 或 [weak]的函数 就是用在本文件占位的,如果别的文件 ...
- C语言之强化,弱化符号weak
C语言之强化,弱化符号weak 转自:http://blog.csdn.net/astrotycoon/article/details/8008629 一.概述 在C语言中,函数和初始化的全局变量(包 ...
- __weak 和 __attribute__((weak)) 关键字的使用
今天在使用 Keil (主要是 armcc 编译器)编译代码(华大的 MCU 驱动库hc32f46x_interrupts.h / c)的时候遇到了有 __weak 关键字的函数不起作用的问题,甚是奇 ...
- c语言之函数或者变量的weak属性 C语言之强化,弱化符号weak
__weak是一个宏,和__packed是同一种东西都是gcc的扩展属性: #define __packed __attribute__((packed)) #define __weak __attr ...
- __attribute__((weak))是什么意思
最近在阅读tcmalloc代码时发现使用了很多__attribute__((weak)),上网搜了以下有所了解. 弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak ...
最新文章
- android wifi动画显示,android动态配置Wifi信息
- A5D2应用程序无法启动问题
- Guojiz网址导航系统PHP网站源码
- Linex第三章第四章
- python 面向对象 类的内置方法
- ubuntu安装 Samba实现局域网文件共享 win10访问
- mysql 嵌套_MySQL嵌套查询实例详解
- 跨时钟域问题(三)异步FIFO的Verilog实现(格雷码)
- py3 写的基于GUI 的 旁注 wwwscan集成扫描工具
- 高级前端工程师知识图谱
- 关于传奇自动触发的几个常用脚本OnKillMob、StdModeFunc、等触发事件
- 清华姚班和100个“张小龙”| 中国AI天才养成计划
- 使用UMI仿今日头条首页
- 消息传递,生产者消费者
- 计算机中文核心期刊-概述一二
- Vue mounted方法中使用data变量
- javaweb技术及应用QST
- Day02:Linux进阶(二)
- 用java获取一维数组的平均值_java中一维数组常见运算
- 指针在c语言中的概念,c语言中指针概念
热门文章
- 【原创】ES5高效封装WIN10系统教程2020系列(三)母盘安装及系统调整
- 远程在线打印图文详解AO打印(端桥模式)
- Java配置jdbc连接数据库不限制ip设置方法(localhost/127.0.0.1/本机ip地址)
- bat命令 获取当前盘符 路径 写环境变量
- 玩转数据可视化之R语言ggplot2:(七)对图形添加注释和标签(包含标题、坐标轴、参考线和高亮等注释方法)
- 救砖用三星i9300官方4.1.2固件刷机包下载港版和国行版 手机天堂-软件世界 | 手机天堂-软件世界...
- IT项目管理最佳实践(管事篇)
- vuex mapstate_vuex详解
- [Unity3D]Unity3D叙利亚NGUI血液和技能的冷却效果
- 拓嘉辰丰:拼多多月卡怎么样?要不要开通?