0-5 编译器、链接器和库介绍
继续我们对上一课(0.4——C++开发入门)中这张图的讨论:

让我们讨论步骤4-7。
步骤4:编译源代码
要编译C++源代码文件,我们需要使用C++编译器。编译器会依次处理程序中的每个源代码文件(.cpp),并执行两项重要任务:
首先,编译器检查C++代码是否符合语言规范。若存在违规,编译器将报错(并标注对应行号)以帮助定位问题。编译过程将暂停直至错误修复。
其次,编译器将C++代码转换为机器语言指令。这些指令存储于名为目标文件object file的中间文件中。目标文件还包含后续步骤所需的其他数据(包括步骤5中链接器所需的数据,以及步骤7调试所需的数据)。
目标文件通常命名为name.o或name.obj,其中name与生成该文件的.cpp文件名称相同。
例如,若程序包含3个.cpp文件,编译器将生成3个目标文件:

C++编译器适用于多种不同的操作系统。我们稍后将讨论编译器的安装事宜,因此现在无需进行安装。
步骤5:链接目标文件与库文件并生成所需输出文件
编译器成功完成工作后,另一个名为链接器linker的程序便开始运作。链接器的任务是将所有目标文件组合起来,生成所需的输出文件(例如可运行的可执行文件)。这个过程称为链接linking。若链接过程中的任何步骤失败,链接器将生成描述问题的错误信息并终止操作。
首先,链接器读取编译器生成的每个目标文件并验证其有效性。
其次,链接器确保所有跨文件依赖关系得到正确解析。例如,若你在某个.cpp文件中定义了某个内容,并在另一个.cpp文件中使用它,链接器会将两者连接起来。如果链接器无法将引用与定义建立关联,就会出现链接器错误,链接过程随之终止。
第三,链接器通常会引入一个或多个库文件library files——这些预编译代码集合经过“封装”处理,以便在其他程序中复用。
最后,链接器生成目标输出文件。通常这是可执行的程序文件(但若项目配置为库文件,则输出库文件)。

标准库
C++自带一个名为C++标准库C++ Standard Library(通常简称“标准库”)的庞大库,为程序开发提供了丰富的实用功能。其中最常用的部分是输入/输出库(常称“iostream”),它包含在显示器上输出文本和获取用户键盘输入的功能。
几乎所有编写的C++程序都会以某种方式使用标准库,因此将C++标准库链接到程序中极为常见。大多数C++链接器默认配置为自动链接标准库,因此通常无需为此操心。
第三方库
您可以选择性地链接第三方库,这些库是由独立实体创建和分发的(而非作为C++标准的一部分)。例如,假设您想编写一个播放声音的程序。C++标准库中并不包含此类功能。虽然你可以自行编写代码从磁盘读取音频文件、验证文件有效性,或设计将声音数据传递给操作系统/硬件以实现扬声器播放的方案——但这将耗费大量精力!更实际的做法是寻找现有软件项目中已实现完整功能的库。
关于如何链接库文件(以及创建自己的库!)的内容,我们将在附录中详细讨论。
构建
由于涉及多个步骤,术语“构建building”常用于指代将源代码文件转换为可执行程序的完整过程。构建过程中生成的特定可执行文件有时也被称为“构建产物build”。
面向高级读者:
对于复杂项目,常使用构建自动化工具(如 make 或 build2)来自动化程序构建和自动化测试运行流程。尽管此类工具功能强大且灵活,但由于它们不属于 C++ 核心语言范畴,且您无需使用它们即可继续学习,因此本教程系列将不涉及相关讨论。
步骤6和7:测试与调试
这可是最有趣的部分!现在你可以运行可执行文件,看看它会做什么啦!
程序运行后即可开始测试。测试Testing是评估软件是否按预期运行的过程。基础测试通常涉及尝试不同输入组合,确保软件在各种情况下都能正确运行。
若程序行为与预期不符,则需进行调试debugging——即查找并修复编程错误的过程。
后续章节将详细探讨程序测试与调试的方法。
集成开发环境(IDEs)
请注意步骤3、4、5和7均涉及必须安装的软件程序(编辑器editor、编译器compiler、链接器linker、调试器debugger)。虽然您可以为每项操作使用独立程序,但集成开发环境(IDE)作为软件包将所有这些功能整合在一起。我们将在下一节中讨论IDE并安装其中一款。

浙公网安备 33010602011771号