📔
operating_system
  • 0 简介
  • 1 操作系统
    • 1.1 操作系统概述
    • 1.2 进程与线程
    • 1.3 死锁
    • 1.4 内存管理
    • 1.5 设备管理
    • 1.6 简明编译原理
  • Linux操作系统
  • shell语言
Powered by GitBook
On this page
  • 编译系统
  • 静态链接
  • 目标文件
  • 动态链接

Was this helpful?

  1. 1 操作系统

1.6 简明编译原理

Previous1.5 设备管理NextLinux操作系统

Last updated 5 years ago

Was this helpful?

编译系统

  • 预处理:处理以 # 开头的预处理命令;

  • 编译阶段:翻译成汇编语言;

  • 汇编阶段:将汇编语言翻译成可重定位目标文件;

  • 链接阶段:将可重定位目标文件和单独预编译好的目标文件合并,最终得到可执行的目标文件。

静态链接

输入:可重定位目标文件;

输出:可执行的目标文件。

主要完成两个任务:

  • 符号解析:每个符号对应于一个函数、全局变量或者静态变量,将每个符号引用与一个符号定义关联起来,即符号引用->符号定义;

  • 重定位:符号定义->内存位置,之后符号引用->内存位置。

目标文件

  • 可执行目标文件:可以直接在内存中执行;

  • 可重定位目标文件:可与其他可以重定位目标文件在链接阶段合并,创建一个可执行目标文件;

  • 共享目标文件:特殊的可重定位目标文件,可以在运行时被动态加载进内存。

动态链接

静态链接的问题:

  • 当静态库更新的时候整个程序都要重新链接;

  • 对于printf等标准函数库,如果每个程度都要静态链接,浪费资源。

共享库可以解决这个问题,在Linux系统中通常用.so,Windows中DLL:

  • 给定的文件系统中一个库只有一个文件,所有引用该库的可执行目标文件都共享这个文件;

  • 在内存中,共享库的.text字节的一个副本可以被不同的正在运行的进程共享。