可执行文件生成概述(预处理-编译-汇编-链接)

在这里插入图片描述

一、预处理(cpp)

1.预处理命令

gcc -E hello.c -o hello.i

在这里插入图片描述
2. 处理源文件中以"#"开头的预编译指令,包括:

  • 删除"#define"并展开所定义的宏
  • 处理所有条件预编译指令,如"#if" ,"#ifdef" ,"#endif" 等
  • 插入头文件到"#include"处,可以递归方式进行处理
  • 删除所有的注释"//" 和"/* */"
  • 添加行号和文件名标识,以便编译时编译器产生调试用的行号信息
  • 保留所有#pragma编译指令(编译器需要用)
    3.经过预编译处理后,得到的是预处理文件(如, hello.i) , 它还是一个可读的文本文件,但不包含任何宏定义

二、编译(cc1)

1.编译命令

- $gcc -S hello.i -o hello.s
- $gcc -S hello.c -o hello.s
- $/user/lib/gcc/i486-linux-gnu/4.1/cc1 hello.c

2.编译过程就是将预处理后到的预处理文件(如hello.i )进行词法分析、语法分析、语义分析、优化后,生成汇编代码文件

  • 经过编译后,得到的汇编代码文件(如hello.s )还是可读的文本文件, CPU无法理解和执行它,gcc命令实际上是具体程序(如ccp、cc1、 as等)的包装命令
  • 用户通过gcc命令来使用具体的预处理程序ccp、编译程序cc1和汇编程序as等

三、汇编

1.汇编指令

- $gcc -c hello.s -o hello.o
- $gcc -c hello.c -o hello.o
- $as     hello.s -o hello.o

在这里插入图片描述
2.汇编程序(汇编器)用来将汇编语言源程序转换为机器指令序列(机器语言程序)

  • 汇编代码文件(由汇编指令构成)称为汇编语言源程序
  • 汇编指令和机器指令一一对应,前者是后者的符号表示,它们都属于机器级指令,所构成的程序称为机器级代码
  • 汇编结果是一个可重定位目标文件(如, hello.o ) ,其中包含的是不可读的二进制代码,必须用相应的工具软件来查看其内容

四、链接

1.链接指令

$gcc -static -o myproc main.o test.o
$ld  -static -o myproc main.o test.o

2.链接过程将多个可重定位目标文件合并以生成可执行目标文件

  • 预处理、编译和汇编三个阶段针对一个模块(一个*.c文件) 进行处理,得到对应的一一个可重定位目标文件( 一个.o文件)
  • static表示静态链接,如果不指定-o选项,则可执行文件名为"a.out"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值