0.5 — 编译器、链接器和库简介

继续我们上一课中对该图表的讨论(0.4 -- C++ 开发简介

The software development process

让我们讨论步骤 4-7。

步骤 4:编译源代码

为了编译 C++ 源代码文件,我们使用 C++ 编译器。C++ 编译器按顺序遍历程序中的每个源代码 (.cpp) 文件,并执行两个重要任务

首先,编译器检查您的 C++ 代码,以确保它遵循 C++ 语言的规则。如果不遵循,编译器将给出错误(以及相应的行号),以帮助您找出需要修复的地方。在错误修复之前,编译过程也将中止。

其次,编译器将您的 C++ 代码翻译成机器语言指令。这些指令存储在一个称为“**目标文件**”的中间文件中。目标文件还包含后续步骤所需或有用的其他数据(包括步骤 5 中链接器所需的数据,以及步骤 7 中调试所需的数据)。

目标文件通常命名为 name.oname.obj,其中 name 与生成它的 .cpp 文件同名。

例如,如果您的程序有 3 个 .cpp 文件,编译器将生成 3 个目标文件

The compilation process

C++ 编译器适用于许多不同的操作系统。我们将在稍后讨论安装编译器,所以现在无需这样做。

步骤 5:链接目标文件和库并创建所需的输出文件

编译器成功完成之后,另一个程序,称为**链接器**,将开始工作。链接器的任务是组合所有目标文件并生成所需的输出文件(例如您可以运行的可执行文件)。这个过程称为**链接**。如果在链接过程中的任何步骤失败,链接器将生成描述问题的错误消息,然后中止。

首先,链接器读取编译器生成的每个目标文件,并确保它们是有效的。

其次,链接器确保所有跨文件依赖项都正确解析。例如,如果您在一个 .cpp 文件中定义了某个内容,然后在另一个 .cpp 文件中使用它,链接器会将两者连接起来。如果链接器无法将对某个内容的引用与其定义连接起来,您将收到链接器错误,并且链接过程将中止。

第三,链接器通常会链接一个或多个**库文件**,这些文件是预编译代码的集合,它们被“打包”以便在其他程序中重复使用。

最后,链接器输出所需的输出文件。通常这将是可启动的可执行文件(但如果您的项目设置如此,它也可能是一个库文件)。

The linking process

标准库

C++ 带有一个庞大的库,称为**C++ 标准库**(通常称为“标准库”),它提供了一组有用的功能供您在程序中使用。C++ 标准库中最常用的部分之一是输入/输出库(通常称为“iostream”),它包含在显示器上打印文本和从用户那里获取键盘输入的功能。

几乎每个编写的 C++ 程序都会以某种方式使用标准库,因此将 C++ 标准库链接到您的程序中是极其常见的。大多数 C++ 链接器默认配置为链接标准库,因此这通常不是您需要担心的事情。

第三方库

您可以选择链接**第三方库**,这些库是由独立实体创建和分发的(而不是作为 C++ 标准的一部分)。例如,假设您想编写一个播放声音的程序。C++ 标准库不包含此类功能。虽然您可以编写自己的代码来从磁盘读取声音文件,检查它们是否有效,或者找出如何将声音数据路由到操作系统或硬件以通过扬声器播放——那将是大量的工作!相反,您更可能找到一些现有的软件项目,其中包含一个已经为您实现了所有这些功能的库。

我们将在附录中讨论如何链接库(以及创建自己的库!)。

构建

由于涉及多个步骤,**构建**一词通常用于指将源代码文件转换为可运行的可执行文件的整个过程。特定可执行文件作为构建结果有时被称为**构建版本**。

致进阶读者

对于复杂的项目,通常使用构建自动化工具(如 **make** 或 **build2**)来帮助自动化构建程序和运行自动化测试的过程。虽然这些工具功能强大且灵活,但由于它们不属于 C++ 核心语言,而且您也无需使用它们来继续,因此我们不会在本教程系列中讨论它们。

步骤 6 和 7:测试和调试

这是有趣的部分!您现在可以运行您的可执行文件并查看它的功能了!

一旦您能够运行程序,就可以对其进行测试。**测试**是评估您的软件是否按预期工作的过程。基本测试通常涉及尝试不同的输入组合,以确保软件在不同情况下表现正确。

如果程序没有按预期运行,那么您将不得不进行一些**调试**,这是查找和修复编程错误的过程。

我们将在未来的章节中更详细地讨论如何测试和调试您的程序。

集成开发环境 (IDE)

请注意,步骤 3、4、5 和 7 都涉及必须安装的软件程序(编辑器、编译器、链接器、调试器)。虽然您可以为每个活动使用单独的程序,但称为集成开发环境 (IDE) 的软件包将所有这些功能捆绑和集成在一起。我们将在下一节中讨论 IDE,并安装一个。

guest
您的电子邮箱地址将不会被显示
发现错误?请在上方留言!
与勘误相关的评论在处理后将被删除,以帮助减少混乱。感谢您帮助使网站对每个人都更好!
来自 https://gravatar.com/ 的头像与您提供的电子邮箱地址相关联。
有回复时通知我:  
296 评论
最新
最早 最多投票
内联反馈
查看所有评论