快速了解GCC与G++:C语言与C++编译器的区别与自举过程解析

2025-02-10
来源:网络整理

1。快速了解GCC和G ++

GCC和G ++都是编译器。 C语言可以用GCC或G ++编译,但建议使用GCC进行编译。但是,C ++语言只能与G ++编译器一起编译。

1.1语言和编译器的引导过程

为了更好地了解GCC和G ++,我们可以在这里介绍语言和编译器的引导过程。当早期计算机首先出生时,只有二进制代码,只有用二进制代码编写的编译器才写成,直到稍后的汇编语言创建为止。但是,当首次创建汇编语言时,没有编译器可以编译汇编语言。我应该怎么办?人们必须先用二进制语言编写一个汇编编译器,以便他们可以编译组装代码。可以在用二进制语言编写的汇编编译器上运行汇编代码后,这意味着人们可以使用汇编代码编写程序然后编写软件。目前,以汇编代码编写的组装编译器(编译器也是软件)。同样,当C语言首先出生时,没有C语言编译器用C语言编写。稍后,只能用C语言编写的C语言编译器。从那时起,C语言可以用C语言进行编译,该语言称为语言的引导过程。

1.2语言翻译过程

从上面的语言引导过程中,我们可以看到语言翻译过程已上演。换句话说,如果您想将C语言翻译成二进制语言,则永远不会将C语言直接转换为二进制语言。您必须首先将C语言转换为汇编语言,然后将汇编语言转换为二进制语言。因为将C语言转化为汇编语言并将汇编语言转换为二进制语言的两个任务,他的前任编写的编译器已经可以在语言开发过程中实现这两个功能,因此语言的翻译过程必须是分阶段的,因此有一些步骤,例如预处理,编译,组装和链接。

2。程序翻译过程1。预处理1.1标头文件扩展

所谓的标头文件扩展实际上将标头文件的内容复制到预处理阶段的源文件中。

1.2载荷1.3宏替换1.4条件汇编

,埃利夫,

-D选项可以动态地将条件添加到代码中以实现条件编译

预处理C语言程序或C语言程序。

gcc -ec文件名-O文件由文件形成的文件名称,即-e从现在开始启动程序翻译过程,并在完成预处理阶段完成时停止。

2。汇编

-s表示从现在开始启动程序翻译过程,并在编译阶段完成时停止。编译后形成的文件是组装代码。

3。汇编

-c表示从现在开始启动程序翻译过程,并在汇编阶段完成时停止。由汇编过程形成的.o文件称为可重新定位的二进制文件。该二进制文件不能执行,需要一个链接过程才能形成可执行程序。

4。链接

链接将形成可执行程序。我们需要知道的是,如果平台想要支持开发,则必须提前在系统中安装语言标头文件和库文件。该链接的本质是构成由我们自己编写的程序形成的.o文件以及系统提供的静态库或动态库中的.o文件链接到形成可执行程序。

3。了解动态和静态库

动态和静态库实际上是一系列.o文件。

动态库:.so,用于动态链接静态库:.a,用于静态链接

静态链接:将您需要的代码直接复制到可执行程序中。因此,允许您复制的库称为静态库。复制后,我的可执行程序不再需要依靠库。静态库的优点是,它们不再需要依靠库,并且可以直接在同一类型的平台上运行和使用程序。缺点也很明显,也就是说,可执行程序的规模将更大并占据更多资源(磁盘资源,网络资源,内存资源)。

动态链接:允许您链接的库称为动态库。可执行程序根据编译器给出的动态库的地址在动态库中找到相应的方法。此过程称为库呼叫。找到功能后,将其返回。链接完成后,可以运行可执行程序。动态库的优点是它们相对节省资源,并且不同程序中不会有重复的代码。缺点是,一旦库丢失,所有取决于库的程序就无法运行。

gcc -o文件名c文件名称该指令默认使用静态链接。如果要使用静态链接形成可执行程序,则需要使用gcc -o文件名c文件名 - 此说明。动态链接是GCC的默认行为。

分享