静态链接
gcc编译程序的时候可以分为四个部分:
(来自于<<程序员的自我修养>>)
- 预处理(Prepressing)
- 编译(Compilation)
- 汇编(Assembly)
- 链接(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
将汇编代码转换为机器可以执行的指令
链接过程:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端