静态链接

gcc编译程序的时候可以分为四个部分:

 

 

 (来自于<<程序员的自我修养>>)

  1. 预处理(Prepressing)
  2. 编译(Compilation)
  3. 汇编(Assembly)
  4. 链接(Linking)

预编译阶段:

  

gcc -E hello.c -o hello.i

 

  主要工作为

  • 展开所有的宏定义,删除#define
  • 处理所有的条件预编译指令,如#if、#ifndef等
  • 处理#include,把头文件的代码复制到#include出,且是递归进行,也就是#include过来的里面可能还需要#include,所以需要加#ifndef来防止重复
  • 删除所有的注释
  • 添加行号和文件标识符
  • 保留所有的#pragma编译器指令,编译器要使用他们

编译过程:

  

gcc -S hello.i -o hello.s

 

  把预处理完之后的文件进行一系列的词法分析、语法分析、语义分析以及优化生成相应的汇编代码文件。

汇编过程:

gcc -c hello.s -o hello.o

  将汇编代码转换为机器可以执行的指令

链接过程:

  

posted @   海蓝笨  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示