美文网首页
第四章 静态链接

第四章 静态链接

作者: Myth52125 | 来源:发表于2017-10-04 17:33 被阅读0次

空间与地址分配

将不同的*.o文件组合成一个可执行文件时,各个文件中各个段的排列顺序。

在将各个.o文件合并成一个可执行文件时,并不时简单的将各个文件直接排列在最终的可执行文件中。
这样做的坏处是,因为对齐的原因造成内存空间中大量的内部碎片。

因此做法是合并相似的段,比如各个文件的.text段,最终都合并在一个.text中。
(不过顺序还不太清楚)

不同的输入顺序

链接

链接器一般采用两步链接:

  1. 空间与地址分配
    也就是上面的那步,当合并以后,计算出各段合并以后的长度和位置,建立映射关系。
    也就是符号表中的值需要改变。
  2. 符号解析与重定位
    该过程确定了每个一些段加载进虚拟地址空间的地址。
    从重定位表中获取要重定位的符号,然后去符号表中的全局符号中去寻找该符号。

COMMON块

和强弱符号一样,只是针对全局符号
源于链接器不能识别类型,只能识别大小

如果模块中的一个全局符号是只声明,而未定义,那么该符号为一个弱符号。
如果声明并定义了,那么该符号是一个强符号。
而通过extern引入的符号不是强符号也不是弱符号(应为它可能在别的地方定义了)。
当在一个模块中,处理弱符号的时候,编译器其实是无法得知该符号最终的类型的。因为其他模块可能定义该符号,编译器需要去其他模块寻找。
但是这时候,编译器,还不知道该符号的大小,因为类型未知,所以大小也未知,因此还不能放入.bss段,因为.bss段的类型都是类型大小已知的,也就是一些局部静态变量。
弱符号:应该只存在在符号表中,被标记为COMMON。(其中符号表中的富豪所在段的值为0xFF2,表示是一个COMMON)
在链接的时候,确定类弱符号的最终大小,一般都是弱符号就取最大的,如果有强符号就取强符号,但是此时如果存在弱符号大小大于强符号,链接器报错。
当该变量是为初始化的全局变量时,链接时,确认了大小,还是会被放在.bss段中。

C++相关

重复代码问题

C++的模板,外部内联函数和虚函数表都可能在不同的便一单元中生成相同的代码。
模板这块再看看书
编译器主流的方法是,将每个模板函数放在同一个段中。
另外提供函数级别的链接,编译出来的文件小,但是编译速度慢

全局构造与析构

C++的全局对象构造在main()之前,析构在main()之后,分别在.init.finit两个段中。

ABI

API指的是源代码级别的接口,而ABI是二进制层面的接口,其兼容性比API要严格。
ABI涉及到:

  1. 内置类型的大小在存储器中存放的方式
  2. 组合类型的存储方式和内存分布
  3. 符号修饰
  4. 函数调用方式:参数入栈顺序,返回值保存
  5. 堆栈分布,参数和局部变量在堆栈里的位置,参数传递方式。
  6. 寄存器约定
  7. 集成体系的内存分布
  8. 指向成员函数的指针的内存分布,如果通过指针调用成员函数,如何传递this
  9. 如何调用虚函数,虚函数表的内容和分布形式,vtable指针在obj中的位置
  10. 模板如何实例化
  11. 全局对象的构造和西沟
  12. 异常的产生和补货
  13. 标准库的一些细节
  14. 内嵌函数的访问细节。

相关文章

  • 操作系统

    • Linux静态链接和动态链接; (转)静态链接和动态链接1、静态链接静态链接方法:#pragma comme...

  • 第四章 静态链接

    4.1 空间与地址分配 问题:当有多个目标文件时,是如何合并到一个文件中的(生成可执行文件),是在哪个位置插入相关...

  • 第四章 静态链接

    空间与地址分配 将不同的*.o文件组合成一个可执行文件时,各个文件中各个段的排列顺序。 在将各个.o文件合并成一个...

  • 静态链接

    静态链接 静态链接涉及的内容包含如下 空间地址的分配 符号解析和重定位 静态库链接 本文的测试代码以及其他文件存在...

  • 静态链接

    编译和链接 预处理 编译扫描(词法分析)、语法分析、语义分析(静态语义是编译器所能分析的,动态语义要在运行期才能确...

  • 静态链接

    大多数编译系统提供编译器驱动程序( compiler driver ),它代表用户在需要时调用语言预处理器、编译器...

  • 静态链接

    静态链接 当有两个目标文件时,如何将它们连接起来形成一个可执行文件?其中发生了什么? 使用两个源代码文件作为研究例...

  • 动态链接与静态链接

    什么是静态链接 如何实现静态链接 静态链接的优点与缺点 什么是动态链接 如何实现动态链接 动态链接的优点与缺点 S...

  • seo中的url结构优化

    一、url结构(访问结构)(链接结构) url一般有:静态链接,动态链接,伪静态链接 伪静态对seo来说非常...

  • 静态库静态链接静态库

    静态库·静态链接·静态库 这么搞的都是有强迫症的人在做SDK。 not me. PS: 多次静态链接同一个第三方库...

网友评论

      本文标题:第四章 静态链接

      本文链接:https://www.haomeiwen.com/subject/qnoaextx.html