浅谈C语言程序编译和链接

浅谈C语言程序编译和链接

1.必要性

为什么要对C语言写的程序进行编译和链接?或者说为什么要对高级语言写的程序进行编译和链接呢?
随着计算机行业的发展,现代计算机其实只能识别机器语言。机器语言是直接用计算机指令代码缩写的语言,用二进制表示,是计算机唯一能直接识别和直接执行的语言。
而我们编写的程序如:

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

用的都是文本编写的语句。
这就好像我们说的说的是方言,正式场合时的交谈需要切换到普通话模式。而计算机的编译和链接正是起的是转换的效果。将我们的方言(变成语言)转变为普通话(机器语言)。让计算机能够识别,然后正常运行我们的程序。

2.过程

比特就业课课件解释编译及链接及过程上图1说明在GCC编译器下编译和链接的过程。
接下来2说明下每个过程的大致内容。
预处理阶段:预处理器 (cpp) 根据以字符#开头的命令,修改原始的 C 程序。
编译阶段:编译器 (eel) 将文本文件 xxx.i 翻译成文本文件 xxx.s, 它包含一个汇编语言程序。
汇编阶段:接下来,汇编器 (as) 将 xxx.s 翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序 obj(relocatable object program) 的格式,并将结果保存在目标文件xxx.o中。
链接阶段:链接器(ld)负责处理调用了内部库函数形成的xxx.a文件,并且与汇编阶段的文件xxx.o进行链接,最后形成可执行的文件。


  1. 比特就业课课件; ↩︎

  2. 深入理解计算机系统; ↩︎

猜你喜欢

转载自blog.csdn.net/BlankXiangzw/article/details/133363149
今日推荐