博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

编译过程

Posted on 2023-03-12 22:18  乔55  阅读(2)  评论(0编辑  收藏  举报

编译过程

  • 预编译:gcc -E hello.c -o hello.i
    • #include包含的文件替换到c文件中,即头文件展开。并不检查语法是否正确。
    • 进行宏定义替换:预编译后,将宏名替换为宏值
    • 在.c源文件中的注释,在预编译后,会在.i文件中变成空行
    • 预编译后仍是源文件,也可叫预处理文件
  • 编译:gcc -S hello.i -o hello.s
    • 将C程序翻译成汇编指令后,生成汇编文件
    • 编译器的核心任务是把C程序翻译成机器的汇编语言
    • 编译过程文件中,主要是逐行做语法检测和句法分析,此过程最耗时
    • 符合规则后,将其翻译成等价的中间代码或汇编代码
  • 汇编:gcc -c hello.s -o hello.o
    • 将汇编指令翻译成对应的二进制编码,编码是人们看不懂的
    • 将编译阶段生成的.s文件转成二进制目标代码,即二进制文件
  • 链接:gcc hello.o -o hello.exe
    • 把目标文件、启动代码、库文件,链接成可执行目标文件的过程
      • 数据合并
      • 数据段地址回填
      • 库引入
    • 此文件可被加载或拷贝到存储器中

gcc 选项

  • gcc编译常用选项
  • gcc编译优化选项
  • gcc警告与错误提示选项