gcc编译器编译过程

本文详细介绍了GCC编译器将C源代码编译为可执行程序的四个步骤:预处理、编译、汇编和链接。通过实例展示了如何分别执行这些步骤,包括如何使用-E、-S、-c选项来停止在特定阶段,以及最终的链接过程。了解这些步骤有助于深入理解编译原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五、gcc编译器编译过程。
1、使用gcc编译器一步到位: gcc xxx.c -o xxx
           gcc编译器
   xxx.c        --------------->    xxx
  高级语言              目标程序(二进制文件)

2、使用gcc编译器细分每一个编译的步骤,可以分为4个步骤:

           预处理            编译            汇编           链接
  xxx.c    ------>  xxx.i   ----->  xxx.s   ---->  xxx.o   ---->  xxx
 高级语言                             目标程序(二进制文件)

3、那么这些步骤是如何处理的?  -> 查看gcc用法: man gcc
1)预处理
-E  Stop after the preprocessing stage; do not run the compiler proper.
    //在预处理之后就停止了,不会运行编译的步骤。

例子:一个程序,如果只预处理,命令如何写?
      gcc xxx.c -o xxx.i -E

file.c  //C语言的文件,并且没有预处理。
C source code that must be preprocessed.

file.i  //C语言文件,但是已经预处理过了。
C source code that should not be preprocessed.

结论: 预处理只是把xxx.c中的头文件,宏定义,条件编译展开

2)编译
-S  Stop after the stage of compilation proper; do not assemble.
    //在编译之后就停止了,不会进行汇编。

例子:一个程序,如果想编译,命令如何写?
      gcc xxx.i -o xxx.s -S  -> 只编译
      gcc xxx.c -o xxx.s -S  -> 预处理+编译

file.i  //C语言文件,但是已经预处理过了。
C source code that should not be preprocessed.

file.s  //汇编语言文件
Assembler code.

结论: 编译只是检查C语言的语法是否正确。

3)汇编
-c  Compile or assemble the source files, but do not link.
    //汇编代码,但是不连接。

例子:一个程序,如果想汇编,命令如何写?
      gcc xxx.c -o xxx.o -c   -> 预处理 + 编译 + 汇编
      gcc xxx.i -o xxx.o -c   -> 编译 + 汇编
      gcc xxx.s -o xxx.o -c   -> 汇编

file.s  //汇编语言文件
Assembler code.

file.o  //二进制文件

结论: 汇编将程序中地址重新排列。

4)链接
作用; 链接一些库文件。

例子: gcc xxx.o -o xxx

file.o  //二进制文件
file    //二进制文件

   练习: 随便写一个.c文件,去试试这几个步骤。

   gcc xxx.c -o xxx.i -E
   gcc xxx.i -o xxx.s -S
   gcc xxx.s -o xxx.o -c
   gcc xxx.o -o xxx


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值