【Linux】gcc/g++区别和联系

gcc/g++是什么

讲到gcc/g++,那就得先说一下GCC,GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。而gcc是GCC中的GUN C Compiler(C 编译器),g++是GCC中的GUN C++ Compiler(C++编译器)

gcc/g++之间的区别和联系

实际使用中我们更习惯使用 gcc 指令编译 C 语言程序,用 g++ 指令编译 C++ 代码。但这并不是 gcc 和 g++ 的区别,gcc 指令也可以用来编译 C++ 程序,同样 g++ 指令也可以用于编译 C 语言程序(C++向下兼容C)。
那么,gcc 和 g++ 的区别是什么呢?
实际上,只要是 GCC 支持编译的程序代码,都可以使用 gcc 命令完成编译。可以认为gcc 是 GCC 编译器的通用编译指令,因为根据程序文件的后缀名,gcc 指令可以自行判断出当前程序所用编程语言的类别,比如:

xxx.c:默认以编译 C 语言程序的方式编译此文件;
xxx.cpp:默认以编译 C++ 程序的方式编译此文件。
xxx.m:默认以编译 Objective-C 程序的方式编译此文件;
xxx.go:默认以编译 Go 语言程序的方式编译此文件;

当然,gcc 指令也为用户提供了“手动指定代表编译方式”的接口,即使用 -x 选项比如:

gcc -xc xxx 表示以编译 C 语言代码的方式编译 xxx 文件;而 gcc -xc++ xxx 则表示以编译 C++ 代码的方式编译 xxx 文件(了解就行,平常很少用到)。

如果使用 g++ 指令,不管目标文件的后缀名是什么,该指令都会按照编译 C++ 代码的方式编译该文件。也就是说,对于 .c 文件,gcc 指令以 C 语言代码对待,而 g++ 指令会以 C++ 代码对待。但对于 .cpp 文件来说,gcc 和 g++ 都会以 C++ 代码的方式编译。

还需要注意:如果我们正确创建并编辑了一个test.c文件,输入命令 gcc test.c 那gcc编译器就会按照c语言的方式来编译该文件,并链接生成可执行文件。

在这里插入图片描述如果我们正确创建并编辑了一个test.cpp文件,输入命令gcc test.cpp 那gcc编译器会按照c++的方式来编译该文件按,但链接时不会自动和C++库进行连接。
在这里插入图片描述
但如果我们输入gcc -lstdc++ test.cpp就可以正常连接并生成可执行文件了。

在这里插入图片描述g++编译器则只会将文件按照C++的方式来进行编译并链接生成可执行文件。
在这里插入图片描述

通过上面我们可以知道,编译可以用 gcc 或 g++,而链接可以使用 gcc -lstdc++ 和 g++。
因为 gcc 命令不能自动和 C++ 库链接,所以通常使用 g++ 来完成链接。但在编译阶段,g++ 会自动调用 gcc,二者等价。

在编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++的库进行链接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接统统用g++了,这就给人一种错觉,好像c++程序只能用g++似的。

猜你喜欢

转载自blog.csdn.net/m0_52347974/article/details/129827184