0.5--编译器、链接器和库简介[译]
原文:0.5--编译器、链接器和库简介 作者:Alex
继续我们上一课(0.4——C++开发简介)中对该图的讨论:

我们来讨论步骤 4-7。
第 4 步:编译源代码
为了编译C++源代码文件,我们使用C++编译器。 C++ 编译器按顺序遍历程序中的每个源代码 (.cpp) 文件并执行两项重要任务:
首先,编译器检查您的 C++ 代码以确保它遵循 C++ 语言的规则。如果没有,编译器会给您一个错误(以及相应的行号)以帮助确定需要修复的内容。编译过程也将中止,直到错误得到修复。
其次,编译器将 C++ 代码翻译成机器语言指令。这些指令存储在称为目标文件的中间文件中。对象文件还包含后续步骤所需或有用的元数据。
对象文件通常命名为 name.o 或 name.obj,其中 name 与其生成的 .cpp 文件的名称相同。
例如,如果您的程序有 3 个 .cpp 文件,编译器将生成 3 个目标文件:

C++ 编译器可用于许多不同的操作系统。我们很快就会讨论安装编译器,所以现在不需要这样做。
第 5 步:链接目标文件和库
编译器成功完成后,另一个称为链接器的程序启动。链接器的工作是组合所有目标文件并生成所需的输出文件(通常是可执行文件)。这个过程称为链接。
首先,链接器读入编译器生成的每个目标文件并确保它们有效。
其次,链接器确保正确解决所有跨文件依赖关系。例如,如果您在一个 .cpp 文件中定义某些内容,然后在不同的 .cpp 文件中使用它,则链接器会将两者连接在一起。如果链接器无法将引用与其定义连接起来,您将收到链接器错误,并且链接过程将中止。
第三,链接器还能够链接库文件。库文件是已“打包”以便在其他程序中重用的预编译代码的集合。
C++ 附带了一个名为 C++ 标准库(C++ Standard Library)(通常简称为标准库)的扩展库,它提供了一组可在程序中使用的有用功能。 C++ 标准库中最常用的部分之一是 iostream 库,它包含,在监视器上打印文本和获取用户键盘输入的功能。几乎每个编写的 C++ 程序都以某种形式使用标准库,因此标准库链接到您的程序中是很常见的。一旦您使用标准库的任何部分,大多数链接器都会自动链接到标准库中,因此这通常不是您需要担心的事情。
您还可以选择链接其他库。例如,如果您要编写一个播放声音的程序,您可能不想编写自己的代码来从磁盘读取声音文件、检查以确保它们有效或弄清楚如何路由声音数据到操作系统或硬件来通过扬声器播放——这将是一项繁重的工作!相反,您可能会下载一个已经知道如何执行这些操作的库并使用它。我们将在附录中讨论如何链接库(并创建您自己的库!)。

一旦链接器完成所有目标文件和库的链接,那么(假设一切顺利)您将拥有一个可以运行的可执行文件。
构建
由于涉及多个步骤,因此术语“构建”通常用于指将源代码文件转换为可以运行的可执行文件的完整过程。作为构建结果而生成的特定可执行文件有时称为构件。
为高级读者准备的
对于复杂的项目,通常使用构建自动化工具(例如 make 或 build2)来帮助自动化构建程序和运行自动化测试的过程。虽然此类工具功能强大且灵活,但由于它们不是 C++ 核心语言的一部分,您也不需要使用它们来继续操作,因此我们不会在本教程系列中讨论它们。
步骤 6 和 7:测试和调试
这是有趣的部分(希望如此)!您可以运行可执行文件并查看它是否产生您期望的输出!
如果您的程序可以运行但无法正常工作,那么就需要进行一些调试来找出问题所在。我们很快将更详细地讨论如何测试您的程序以及如何调试它们。
集成开发环境 (IDE)
请注意,步骤 3、4、5 和 7 都涉及必须安装的软件程序(编辑器、编译器、链接器、调试器)。虽然您可以为每项活动使用单独的程序,但称为集成开发环境 (IDE) 的软件包将所有这些功能捆绑并集成在一起。我们将在下一节中讨论 IDE 并安装它。
浙公网安备 33010602011771号