当前位置:网站首页>程序编译过程(扫盲贴)
程序编译过程(扫盲贴)
2022-08-05 22:42:00 【coder.mark】
一、目的
很多小伙伴都是从IDE开始编程学习,记得那个时候我们用的还是VC++ IDE,不知道现在大学里面教学是否已经更新;一个代码从开始编写要最终的执行要经历多个过程,每个过程都会产生一些中间文件;下面就简单介绍一下各个过程,加深大家的理解。
二、介绍

上图就是源代码foo.c变成foo.out经历的整个过程,分别为预处理、编译、汇编、链接。
假设我们有这样一段代码:
#include <stdio.h>
int main(int argc, char **argv) {
printf("hello world\n");
return 0;
}预处理
我们的代码中有时候需要通过`#include`预处理指令包含其他头文件或者通过`#define`命令定义一些宏,这些预处理指令是在编译之前被处理的(经过预处理器处理);
上面的代码中我们只有一个`#include`指令用来包含`stdio.h`这个头文件(因为我们需要通过printf进行一些打印)。
gcc -E foo.c -o foo.i通过`-E`选项我们指示GCC进行预处理操作,`-o`选项用于指明输出文件名 ,我们可以打开foo.i这个文件查看里面的内容(内容较多不再贴出)
编译
将经过预处理后代码转换成汇编代码的过程。
gcc -S foo.i -o foo.s汇编
将汇编代码转换成机器码,这一步骤会生成目标文件
gcc -c foo.s -o foo.o链接
链接器将目标文件与其他目标文件(动态库、静态库)等链接起来生成可执行文件。
gcc foo.o -o foo.out上面我们将编译的整个过程进行了分解,如果只是简单的进行编译只需要一行命令:
gcc foo.c -o foo.out以上就是本篇所有内容,关于GCC的详细用法以及各个选项的含义后续有时间再分享。
边栏推荐
猜你喜欢
随机推荐
Peeking into the Big from the Small: IO Caton Explores Apple's File System
怎么给MySQL添加自定义语法
js监听退出全屏事件
Interpretation of APS and its benefits
Login and register (unpackaged) flask
Bucket Sort
ESXI7.0主机安装群晖DS3617xs
什么是 MySQL?SQL 数据库初学者教程和使用指南
CAN-Oe channel configuration method
Is it better to design vias as small as possible?
为什么五千块天价加急费都无法保证交期?
Selection Sort
APS在印刷行业的应用前景和应用效益
[Home Assistant]esp32 Bafa cloud access ha
推送消息到手机
NVM quick installation tutorial, only one
视觉slam学习|基础篇02
[ESP32] ESP8266 is connected to Xiao Ai to control relay 2
60:第五章:开发admin管理服务:13:开发【新增/修改友情链接,接口】的新增功能;(向MongoDB中,新增数据)(操作MongoDB的Dao层接口,得继承MongoRepository接口;)
About CRT password decompilation









