【静态链接】第2章---------------------目标文件(弱符号与强符号)
2014-03-03 12:25
253 查看
######## 该系列博文为书籍《程序员的自我修养》的笔记 ##########
【说明】
有时我们在程序中一不小心重复定义了2个名字相同的变量,比如在文件A.c中定义了一个int a , 在B.c 也定义了一个,那么在编译的时候就会出现符号重复定义错误,这种符号称之为“强符号”,而与之对应的就是“弱符号”,这两种符号的区别是这节的重点!
【区分】
1】编译器有以下分类方法
1)函数和初始化了的全局变量为强符号
2)未初始化的全局变量为弱符号
2】自定符号类型
我们可以用如下方式来定义一个强符号为弱符号
【规则】
如果同时出现了多次定义,根据强弱符号,会有如下规则
1)不允许强符号多次定义(不同目标中不能有同名强符号)
2)如果一个符号被定义成强符号。又被定义成弱符号,那就选择强符号
3)如果在所有目标文件中都是弱符号,那选择存储空间最大的一个。
【强引用和弱引用】
如果一个目标文件引用了不存在的引用而导致错误,那么这个引用就是“强引用”,如果不报错就是“弱引用”
可以如下把一个符号的引用设置为弱引用。
相关文章推荐
- 【静态链接】第2章---------------------目标文件(符号)
- 【静态链接】第2章---------------------目标文件(它是什么)
- 【静态链接】第2章---------------------目标文件(ELF格式之重定位表与字符串表)
- 【静态链接】第2章---------------------目标文件(ELF格式之文件头)
- 【静态链接】第2章---------------------目标文件(ELF格式之段表)
- 第2部分 静态链接---(3)目标文件里有什么
- nm用来列出目标文件(静动态库)的符号清单 也相当windows的depends
- 【静态链接】第2章---------------------静态链接过程(符号解析与重定位)
- 软件调试笔记53 - 调试符号 : 目标文件中的调试信息
- nm命令_Linux nm 命令用法详解:显示二进制目标文件的符号表
- 普通目标文件的符号解析与重定义处理策略
- linux/windows下查看目标文件.a/.lib的函数符号名称
- [置顶] linux/windows下查看目标文件.a/.lib的函数符号名称
- 目标文件中符号表的符号类型
- c/c++目标文件中_ZN****符号是什么意思
- TMS320C54x系列DSP指令和编程指南——第2章 通目标文件格式介绍
- nm命用于显示二进制目标文件的符号表
- 二进制工具:nm_列出目标文件中的符号表]
- #nm 命令 列出目标文件的符号清单
- linux命令之nm显示二进制目标文件的符号表