源程序到可执行程序的过程

假设用户编写了一个c程序如下:

#include <stdio.h>
int main(){
    printf("hello,world!");
}

编写完后的程序称为C源程序(hello.c)。

然后C源程序经过下列流程转化为可执行程序hello.exe

 (1)预编译阶段:预处理程序(cpp)对源程序中以字符井开头的命令进行处理。例如,将#include命令后面的.h文件内容嵌入到源程序文件中。预处理程序的输出结果还是一个源程序文件,以i为扩展名。

(2)编译阶段:编译程序(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序文件,以s为扩展名,例如,hello.s是一个汇编语言程序文件。

(3)汇编阶段:汇编程序(as)对汇编语言源程序进行汇编,生成一个可重定位目标文件(relocatable object file),以o为扩展名,例如,hello.o是一个可重定位目标文件。它是一种二进制文件(binary file),因为其中的代码已经是机器指令,数据以及其他信息也都是用二进制表示的,所以它是不可读的,即打开显示出来的是乱码。

(4)链接阶段:链接程序(ld)将多个可重定位目标文件和标准库函数合并成为一个可执行文件(executable object file),可执行目标文件简称为可执行文件。本例中,链接器将hello.o和标准库函数printf所在的可重定位目标模块printf.o进行合并,生成可执行文件hello.exe。

最终生成的可执行文件被保存在磁盘上,可以通过某种方式启动一个磁盘上的可执行文件运行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值