编译
编译器可以将源代码转换成机器语言,在编译过程中,会找出错误并报告。这个阶段的输入是在编辑期间产生的文件,常称为源文件。
编译器能找出程序中很多无效的和无法识别的错误,包括结构错误,例如程序的某个部分永远不会执行。编译器输出的结构叫作对象代码,存放它们的文件叫作对象文件。在 Linux 中这些文件的扩展名通常是 .o,在 Windows 下面这些文件的扩展名通常是 .obj 。如果编译成功就会生成一个文件,它与源文件同名。但扩展名为 .o 或者 .obj 。
其实我们在上一节编写第一个 C 语言程序的时候,使用的
gcc -o 1-1 1-1.c
这条命令既包含了编译也包含了链接,所以直接生成了可执行文件 1-1 。
在 Linux 下编译是在源代码文件所在目录输入以下命令(假如源代码文件是上节课的 1-1.c):
gcc -c 1-1.c
这时源文件所在的目录将会生成 1-1.o 的文件。
链接
链接器将源代码文件中由编译器产生的各种对象模块组合起来,再从 C 语言提供的程序库中添加必要的代码模块,将它们组合成一个可执行文件。链接器也可以检测和报告错误,例如程序中引用了一个根本不存在的库组件。链接一旦成功,就会生成可执行文件,在 Windows 下面可执行文件的扩展名是 .exe,在 Linux 下面,可执行文件没有扩展名,但它的文件类型是可执行的。
在编译生成 .o 文件的基础上我们将会输入以下命令(以编译生成 1-1.o 为例):
gcc -o 1-1 1-1.o
这时 1-1.o 所在的目录将会生成 1-1 可执行文件。
多数情况下,我们是通过
gcc -o 1-1 1-1.c
一次性完成编译和链接。
执行
执行阶段就是成功完成了前述的三个过程后,运行程序。但是这个阶段可能会出现各种错误,包括输出错误,计算机什么也不做哦,甚至是计算机崩溃。无论如何,都需要我们返回编辑阶段,检查并修改源代码。相信大家都还记得上一节课的执行命令,在文件所在目录执行:
./可执行文件name