在系统上运行程序¶
约 393 个字 预计阅读时间 2 分钟
链接¶
- gcc编译链接程序:cpp预处理器预处理源文件,cc1编译器编译.i文件为.S文件,as汇编器将.S文件变为可重定位目标文件.o,最后运行ld链接器,创建一个可执行程序
- 执行./a.out,shell调用加载器函数,将可执行文件的.text和.data复制到内存并跳转到该程序开头
解析多重定义的全局符号¶
- 规则
1. 不允许多个同名的强符号
2. 如果有一个强符号和多个弱符号同名,选择弱符号
3. 如果有多个弱符号同名,选择其中任意一个 - 链接器不会表示检测到符号的多重定义
- 未初始化的全局变量交给COMMON段,将可能存在多重定义的变量交给链接器进行裁决
- 未初始化的静态变量,初始化为0的静态或全局变量在.bss段;全局变量初始化为0是一个强符号
与静态链接库链接¶
- 链接器将只复制被程序引用的目标模块
动态链接共享库¶
- 链接器复制了.so文件的重定位和符号表信息
- 在可执行文件加载后,存在.interp节,加载动态链接器(ld-linux.so);动态链接器本身不能依赖任何动态库,所有它是静态链接的