源代码 —> 编译器 —> 目标代码 —> 链接程序 —> 可执行代码
编译源代码,将源代码翻译成机器语言,包含了翻译后的程序的文件就是目标代码。
链接是将目标代码同使用的函数的目标代码以及一些标准的启动代码(startup code)组合起来,生成程序的运行阶段版本。
包含最终产品的文件被称为 可执行代码
1、UNIX编译和链接
使用CC命令来编译程序。名称采用大写字母,这样可以将它与标准UNIX C 编译器cc分开来。CC编译器是命令行编译器,这意味着需要在UNIX命令行上输入编译命令。
例如要编译C++源代码文件spiffy.C,则应在UNIX下输入:
CC spiffy.C
如果一切正确,编译器生成一个扩展名为 o 的目标代码文件。在这个例子中,编译器将生成文件spiffy.o
接下来,编译器自动将目标代码文件传递给系统链接程序,该程序将代码与库代码结合起来,生成一个可执行文件。在默认情况下,可执行文件为 a.out。 如果只使用一个源文件,链接程序还将删除spiffy.o文件,因为这个文件不需要了。
输入可执行文件的文件名即可运行该文件,a.out
如果编译新程序,新的可执行文件a.out将覆盖已有的a.out,这样有利于降低存储需求。
* 同时编译多个源代码文件,输入命令CC my.C precious.C
* 如果修改了my.C文件,可用以下命令重新编译CC my.C precious.o,这将重新编译my.C 文件,并将它与前面编译的precious.o文件链接起来。
2、Linux编译和链接
Linux系统最常用的编译器是g++,g++编译器的工作方式很像标准UNIX编译器。例如,下面的命令将生成可执行文件a.out
g++ spiffy.cxx
有些版本可能要求链接C++库: g++ spiffy.cxx -lg++
要编译多个源文件,只需将它们全部放到命令行中即可: g++ my.cxx precious.cxx
这将生成一个名为a.out的可执行文件和两个目标代码文件my.o 和 precious.o。
如果修改了其中某个源代码文件,如my.cxx, 可用以下命令重新编译g++ my.cxx precious.o