C语言编译、链接过程

这些天遇到关于编译与链接的问题,所以根据网上资料写下了对这个过程进行简单梳理!

这里写图片描述


一、编译过程:

   预处理  -->编译-->汇编

1、预处理:

   完成对源程序的“替代”工作,主要对头文件宏定义,特殊字符处理

2、编译:

   对语法进行差错,分析是否符合规则,然后翻译成汇编代码。

3、汇编:

  把   汇编代码--->目标机器代码  的过程。

目标代码通常有两个段组成:

  • 代码段:该段中包含主要的程序指令,一般可读可执行不可写。
  • 数据段:存放全局或静态变量,可读可写可执行

二、链接过程:

  将有关目标文件彼此连接,包括引用的一些库文件。

按需求分为两种:

  • 静态链接:将代码从所在静态链接库中拷贝到可执行程序中。所以执行在执行的时候,这些代码将被装入到该进程的虚拟空间中。
  • 动态链接:链接时只需要在最终可执行程序中记录下共享对象的名字以及少量登记信息,无需全部拷贝过来。程序运行时,动态链接库内容被映射到运行时相应虚地址空间。

三、gcc分步进行该过程:

Linux下我们使用 gcc编译器 把以上过程进行了捆绑,该命令一次完成所有工作。

这里写图片描述

过程命令执行前的文件执行后的文件对应命令
预处理gcc -E.c/.h.icpp
编译gcc -S.i/.h.scc -S
汇编gcc -c.s.oas
链接gcc.o可执行程序ld

详细分析可参考博客:

http://soft.chinabyte.com/database/174/12454174.shtml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值