介绍编译器,连接器和库

介绍编译器,连接器和库

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

软件开发过程

我们来讨论步骤4-7。

第4步:编译源代码

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

首先,它检查您的代码以确保它遵循C++语言的规则。如果没有,编译器会给你一个错误(和相应的行号),以帮助确定需要修复的内容。编译过程也将中止,直到错误得到修复。

其次,它将您的C++源代码转换为称为目标文件的机器语言文件。目标文件通常名为name.o或name.obj,其中name与生成它的.cpp文件的名称相同。

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

编译过程

C++编译器可用于许多不同的操作系统。我们将讨论很快安装编译器,因此现在不需要这样做。

第5步:链接目标文件和库

在编译器创建一个或多个目标文件之后,另一个称为链接器的程序 启动。链接器的工作有三个:

首先,获取编译器生成的所有目标文件,并将它们组合成一个可执行程序。

链接过程

其次,除了能够链接目标文件之外,链接器还能够链接库文件。一个库文件是预编译代码的集合,它已经“打包”在其他程序中重用。

C++核心语言实际上相当小而简洁(您将在这些教程中学到很多东西)。但是,C++还附带了一个名为C++标准库(通常缩写为标准库)的扩展库,它提供了可在程序中使用的其他功能。C++标准库中最常用的部分之一是iostream库,包含在显示器上打印文本和从用户获取键盘输入的功能。几乎所有编写的C++程序都以某种形式使用标准库,因此将标准库链接到程序中非常常见。一旦你使用它的任何部分,大多数链接器将自动链接到标准库中,所以这通常不是你需要担心的事情。

您也可以选择在其他库中链接。例如,如果您要编写一个播放声音的程序,您可能不希望编写自己的代码来读取磁盘中的声音文件,检查以确保它们有效,或者弄清楚如何路由声音数据通过扬声器播放操作系统或硬件 - 这将是很多工作!相反,你可能会下载一个已经知道如何做这些事情的库,并使用它。我们将在附录中讨论如何在库中链接(并创建自己的!)。

第三,链接器确保正确解析所有跨文件依赖关系。例如,如果您在一个.cpp文件中定义某个内容,然后在另一个.cpp文件中使用它,则链接器会将两者连接在一起。如果链接器无法使用该事物的定义连接对事物的引用,则会出现链接器错误,并且链接过程将中止。

一旦链接器完成链接所有目标文件和库(假设一切顺利),您将拥有一个可执行文件,然后您可以运行!

对于高级读者

对于复杂项目,某些开发环境使用makefile,该文件描述了如何构建程序(例如,要编译和链接的文件,或以其他方式处理)。已经写了关于如何编写和维护makefile的全书,它们可以成为一个非常强大的工具。但是,因为makefile不是C++核心语言的一部分,也不需要使用它们来继续,所以我们不会将它们作为本教程系列的一部分进行讨论。

步骤6和7:测试和调试

这是有趣的部分(希望如此)!您可以运行可执行文件,看看它是否产生您期望的输出!

如果您的程序运行但无法正常工作,那么现在是时候进行一些调试以找出问题所在。我们将讨论如何测试您的程序以及如何更快地调试它们。

集成开发环境(IDE)

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