linux下gcc和gcc-c++的作用

本文介绍了Linux环境下gcc和gcc-c++的安装方法及GCC的功能作用,包括预处理、编译、连接和汇编等步骤,并解释了gcc遵循的文件后缀约定规则。

linux 为什么要安装gcc和gcc-c++(又叫做g++)
gcc-c++(又叫做g++)是为gcc提供c++语言特性支持的
linux上的gcc是Gnu的C语言编译器,至于C++编译器,它的名字叫做g++。

linux中的gcc是由GNU推出的一款功能强大的、性能优越的多平台编译器。gcc编译器能将C、C++语言源程序和目标程序编译、连接成可执行文件。

GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C等语言。

gcc是GCC中的GUN C Compiler(C 编译器)

g++是GCC中的GUN C++ Compiler(C++编译器)

以CentOS为例,安装后是没有C语言和C++编译环境的,需要手动安装,最简单的是用yum的方式安装,过程如下:

1、安装gcc

yum install gcc
询问是否,按y键回车即可,或者

yum -y install gcc
不用确定全部就安装好了。

2、安装g++

yum install gcc-c++
或者
yum -y install gcc-c++
安装完毕。

只在CenOS 7.2下测试正常

(g++就是c++的使用)

在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面介绍gcc所遵循的部分约定规则。

.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。

GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。

GCC功能与作用:

1、预处理

命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。

2、编译

用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。

3、连接

当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

4、汇编

汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。

gcc所遵循的部分约定规则:

1、.c为后缀的文件,C语言源代码文件。

2、.a为后缀的文件,是由目标文件构成的档案库文件。

3、.h为后缀的文件,是程序所包含的头文件。

4、.i 为后缀的文件,是C源代码文件且不应该对其执行预处理。

5、.m为后缀的文件,是Objective-C源代码文件。

6、.o为后缀的文件,是编译后的目标文件。

7、.s为后缀的文件,是汇编语言源代码文件。

<think>好的,我现在需要回答用户关于Linuxgccgcc-c++的区别的问题。首先,我得确认自己对这两个工具的理解是否正确。 记得gcc是GNU Compiler Collection的缩写,它支持多种编程语言,比如C、C++、Fortran等。但用户提到的是gccgcc-c++,这可能是Linux发行版中的软件包名称。比如在基于RPM的系统如Fedora或CentOS中,gcc包通常只包含C编译器,而gcc-c++则包含C++编译器(g++)以及相关的库,比如标准模板库STL。因此,用户如果安装gcc,只能编译C代码,而安装gcc-c++后才能编译C++程序。 接下来需要验证这个理解是否正确。比如,用户如果只安装gcc,尝试用g++命令可能会提示找不到,这时候必须安装gcc-c++包。此外,C++的编译需要链接不同的标准库,比如libstdc++,这些库可能在gcc-c++包中提供。 另外,要注意到gcc本身作为编译器集合,虽然支持多种语言,但不同的软件包可能分开发布。比如在Debian/Ubuntu系统中,可能有gccg++两个单独的包,或者通过build-essential来安装。但用户的问题可能集中在RPM系的分发版,所以需要明确区分。 还需要考虑编译时的命令区别。使用gcc编译C++代码时,可能需要手动指定链接库,而g++会自动处理这些。例如,用户用gcc编译C++文件可能会遇到链接错误,而使用g++则不会,因为g++会自动链接C++标准库。 另外,引用的资料中有提到GCC支持Objective-C++,这可能属于gcc包的一部分还是gcc-c++?需要确认,但用户的问题主要关注C++,所以可能不需要深入讨论这个。 总结下来,gccgcc-c++的主要区别在于支持的编程语言相关工具链。安装gcc-c++后,用户可以使用g++命令,并且能够正确编译链接C++代码,包括标准库。此外,构建C++项目时,如果没有安装gcc-c++,可能会在编译或链接阶段失败。 相关问题方面,用户可能还想知道如何安装这些包,或者混合使用CC++代码时的注意事项,或者编译优化选项的区别,比如引用中提到的-O2参数的作用。此外,关于编译器的选择,比如GCC与Clang在C++支持上的差异,也可能是有用的相关问题。</think>### Linuxgccgcc-c++的区别 在Linux系统中,`gcc``gcc-c++`是两个不同的软件包,主要区别在于支持的编程语言工具链组件: 1. **功能定位** - **`gcc`**:是GNU编译器集合(GNU Compiler Collection)的基础包,主要提供C语言编译器(`gcc`命令)及相关工具库。默认不包含C++编译器。 - **`gcc-c++`**:是GCC的扩展包,包含C++编译器(`g++`命令)及C++标准库(如`libstdc++.so`)头文件。安装后支持C++代码的编译链接[^1]。 2. **编译命令差异** - 使用`gcc`编译C++代码时,需手动指定C++标准库,例如: ```bash gcc -o test test.cpp -lstdc++ ``` 否则可能因未链接库而报错。 - 使用`g++`(安装`gcc-c++`后可用)会自动处理C++语法库链接: ```bash g++ -o test test.cpp ``` 3. **依赖关系** - 仅安装`gcc`时,无法编译C++程序(如缺少`g++`命令)。 - 安装`gcc-c++`后,会同时依赖`gcc`的基础组件,从而支持多语言编译[^2]。 4. **应用场景** - **纯C项目**:仅需`gcc`。 - **C/C++混合项目**:需同时安装`gcc``gcc-c++`,或直接安装`gcc-c++`(因其包含基础C编译器)。 - **C++标准库开发**:`gcc-c++`提供完整的STL实现,如容器、算法等。 --- ### 示例:编译C++程序 若未安装`gcc-c++`,直接运行`g++`会报错: ```bash Command 'g++' not found ``` 安装命令(以CentOS为例): ```bash sudo yum install gcc-c++ ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值