Linux obj 定义描述
来源:互联网 发布:电脑解压软件下载 编辑:程序博客网 时间:2024/06/14 21:42
Ndx定义了和该符号相关的section index
bind域说明了该符号的可见性和行为:
GLOBAL表示可以对所有的.o文件可见,
LOCAL表示对其他的.o文件不可见(对c程序员而言就是static修饰符,由于是local的,因此用static修饰的变量可以重名)。
WEAK,表示该符号是一个weak symbol。weak symbol的含义和global symbol含义是一样的,都是对外可见,只不过在如果有其他定义的同名的global symbol,那么weak symbol就消失。
LOCAL符号不是临时变量(hello_world函数中的tmp),临时变量是放在stack中的,不会出现在符号表中。
外部符号,目前我们对其一无所知,因此其size等于0,type是NOTYPE,对应的section是UND,表示该符号undefine(在section table中,第一个entry就是undefine section)。
COM是一个特别定义的section index,标识这是一个common block。
要理解这一点需要一些背景知识:传统的unix编译器是允许在多个编译单元(c文件)中定义未初始化的全局变量的,也就是说,在两个c文件中都定义了名字一样的未初始化的全局变量是不会引起编译错误的,
编译器在编译的时候会把未初始化的全局变量放入到common block中而不是.bss section。假如放入到.bss section,就意味着已经分配了该符号的地址,runtime的时候会占用内存。
那么linker在合并.bss section的时候就会发现重复定义的符号了。gcc的编译器的缺省行为和传统unix c编译器一致,
因此将hello_world_bss放入到common block中。其实这一点可能会给程序员(主要是粗心的程序员)带来非常难以解决的bug,你可以使用-fno-common来关闭这个特性,这时候,定义在多个文件中的同名的未初始化的全局变量在link的时候会报错。
阅读全文
0 0
- Linux obj 定义描述
- LInux 描述符GDT, IDT & LDT结构定义
- obj-c 定义一个类
- link2005错误 .obj重定义
- linux Makefile obj-m obj-y ..
- linux Makefile obj-m obj-y
- linux Makefile obj-m obj-y ..
- error LNK2005 已经在***.obj中定义
- error LNK2005 已经在***.obj中定义
- error:LNK2005 已经在*.obj中定义
- 动态库中dllmain.obj 重定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- error:LNK2005 已经在*.obj中定义
- C盘装太多文件会影响系统速度吗?
- AndroidStudio常见问题
- rabbitmq最大连接数(Socket Descriptors)
- Unity 模拟键盘按键事件
- 计算机图形学之光线跟踪算法的研究与实现2017年我的优秀毕业论文
- Linux obj 定义描述
- HTTP权威指南 文字版 带目录
- IT修真院是个什么样的机构?
- 对称排序
- 解决java读取大文件内存溢出问题、如何在不重复读取与不耗尽内存的情况下处理大文件
- 只有想不到,没有做不到
- ES5,ES6互相转换
- 分布式搜索elasticsearch配置文件详解
- Golang 获得文件名最快的代码实现方式比较