静态链接

Posted wuyun--wy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态链接相关的知识,希望对你有一定的参考价值。

  • 链接的主要任务:符号解析和重定位
  • 可重定位文件的特质:通过文件头--》探测到段表,字符串表等(结构体数组)--》从而解析整个目标文件的各个section。
  • 符号类型:定义在本目标文件的全局符号;在本目标文件引用的未定义在该目标文件的全局符号;段名,static局部符号等;
  • 符号解析(涉及到强弱符号解析的规则)。

 

  • 一旦链接器完成了符号解析这一步,代码中的每个符号引用和正好一个符号定义相关联。此时链接器就知道了它的输入目标模块中的代码节和数据节的大小,现在可以开始重定位了。重定位将 合并输入模块(例如所有输入模块的.data节全被和并成一个节),并为每个符号分配运行时地址。
  • 地址空间分配是 在合并之后做的虚拟地址空间的分配),链接器将运行时地址赋给新的聚合节,赋给每个模块的节,每个符号,在这之后程序中的每条指令和全局变量都有了唯一的运行时地址,根据重定位表中的重定位入口进行重定位,指令地址修正。输出成为可执行目标文件。
  • 可执行目标文件有程序头表,装载的时候根据程序头表进行装载。涉及到进程的创建和执行等过程。

 

以上是关于静态链接的主要内容,如果未能解决你的问题,请参考以下文章

如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看

静态链接与动态链接

静态链接与动态链接

静态链接与动态链接

Makefile 链接静态库

如何使用cmake生成基于静态库的动态链接库