程序编译过程(扫盲贴)

一、目的

        很多小伙伴都是从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的详细用法以及各个选项的含义后续有时间再分享。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值