程序从源代码到可执行文件的整个过程

程序被其他程序翻译成不同的格式

hello程序的源文件虽然能够被人读懂,但为了能让它在系统上运行,每条c语句都要被其他程序转化为一系列的低级机器语言指令,然后这些指令按照一种可执行目标程序的格式打包好并以二进制磁盘文件的形式存放起来,才能在系统中运行。
在unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的。

gcc -o hello hello.c

   
   
    
    
  • 1

这条命令会让GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello,这个翻译过程分为四个阶段:
翻译过程
1.预处理阶段:
预处理器(cpp)根据以字符#开头的命令,修改原始的C程序,比如hello.c文件中第1行#include<stdio.h>告诉预处理器读取系统头文件stdio.h中的内容,所以在这个阶段,预处理器(cpp)就会把这个头文件中的内容插入到hello.c程序文本中,从而得到另一个C程序,通常这个新得到的C程序以.i作为文件扩展名。
2.编译阶段:
编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序,即将C语言程序编译成汇编语言程序
3.汇编阶段:
汇编器(as)将hello.s翻译成机器语言指令,然后把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件hello.o中,hello.o文件是一个二进制文件,它的字节编码是机器语言指令(01)而不是字符。
4.链接阶段:
hello程序调用了printf函数,这个每个C编译器都会提供的标准C库中的一个函数,printf函数存在于一个名为printf.o的单独预编译好了的目标文件中,(我对这段话的理解是printf函数最开始是在一个printf.c文件中实现的,然后经过预处理、编译、汇编形成了目标文件printf.o,,可能每一个自己程序中非自己亲手实现的函数都是一个以.o为后缀的目标文件,然后在链接阶段由链接器(ld)把这所有的目标文件合并,最终实现完整的程序,可执行文件,可以被加载到内存,由系统执行。)

深入理解计算机系统笔记:

  1. 计算机中信息的表示
  2. 计算机中信息的表示和处理
  3. 程序从源代码到可执行文件的整个过程
  4. 可执行文件运行的底层原理
  5. 操作系统对程序提供服务的方法
  6. 网络通信

程序被其他程序翻译成不同的格式

hello程序的源文件虽然能够被人读懂,但为了能让它在系统上运行,每条c语句都要被其他程序转化为一系列的低级机器语言指令,然后这些指令按照一种可执行目标程序的格式打包好并以二进制磁盘文件的形式存放起来,才能在系统中运行。
在unix系统上,从源文件到目标文件的转化是由编译器驱动程序完成的。

gcc -o hello hello.c

   
   
  
  
  • 1

这条命令会让GCC编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello,这个翻译过程分为四个阶段:
翻译过程
1.预处理阶段:
预处理器(cpp)根据以字符#开头的命令,修改原始的C程序,比如hello.c文件中第1行#include<stdio.h>告诉预处理器读取系统头文件stdio.h中的内容,所以在这个阶段,预处理器(cpp)就会把这个头文件中的内容插入到hello.c程序文本中,从而得到另一个C程序,通常这个新得到的C程序以.i作为文件扩展名。
2.编译阶段:
编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序,即将C语言程序编译成汇编语言程序
3.汇编阶段:
汇编器(as)将hello.s翻译成机器语言指令,然后把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件hello.o中,hello.o文件是一个二进制文件,它的字节编码是机器语言指令(01)而不是字符。
4.链接阶段:
hello程序调用了printf函数,这个每个C编译器都会提供的标准C库中的一个函数,printf函数存在于一个名为printf.o的单独预编译好了的目标文件中,(我对这段话的理解是printf函数最开始是在一个printf.c文件中实现的,然后经过预处理、编译、汇编形成了目标文件printf.o,,可能每一个自己程序中非自己亲手实现的函数都是一个以.o为后缀的目标文件,然后在链接阶段由链接器(ld)把这所有的目标文件合并,最终实现完整的程序,可执行文件,可以被加载到内存,由系统执行。)

深入理解计算机系统笔记:

  1. 计算机中信息的表示
  2. 计算机中信息的表示和处理
  3. 程序从源代码到可执行文件的整个过程
  4. 可执行文件运行的底层原理
  5. 操作系统对程序提供服务的方法
  6. 网络通信

猜你喜欢

转载自blog.csdn.net/weixin_43743711/article/details/127159536