用以下命令:
yum install gcc
安装的只有gcc,而不会安装g++。gcc是编译器合集,而gcc-g++或简称g++则是C++编译器。gcc成为了编译器的选择器。gcc通过识别被编译的源代码的后缀名,来启用不同的编译器来编译。如果是m.c,则会启用c语言编译器编译;如果是m.cpp,则会启用g++来编译。我们都可以用gcc m.c(pp)来实现编译。
但是使用上述命令安装的gcc,并没有安装g++编译器。所以你编译cpp文件时会提示:
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
而如果直接执行g++命令,则提示命令找不到:
[root@VM_41_21_centos pkg]# g++ --version
-bash: g++: command not found
这充分说明,gcc和g++并不是一回事。而区别在一开头就解释了。
如果要安装g++编译器,则需要再安装gcc-c++,命令如下:
yum install gcc-c++
安装完了,我们就需要看一下gcc编译器的版本:
[root@VM_41_21_centos pkg]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我们可以在查看下g++编译器的版本:
[root@VM_41_21_centos pkg]# g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
之前我问朋友同事gcc和g++查出来的版本有区别吗?他们说没有区别。但是最近折腾服务器折腾的多,升级编译器后,发现gcc和g++查出来的版本号不一样,其中必定有蹊跷。通过一步步慢慢的摸索查资料学习,也就慢慢整明白了。
gcc和g++的版本,我们一般都会同步的安装或升级。但是有时候也可能出现不同步的现象。上面就甚至没有安装g++。如果在升级编译器的时候,只升级了gcc,那么gcc和g++的版本都不一样了。至于版本不一样,是不是用gcc和g++编译会有差异,我没有研究了。当然,gcc编译C代码,g++编译c++代码,肯定都是按照gcc或g++的版本来的。但是gcc来编译C++代码,就不知道是什么情况了。(你可以用低版本的gcc编译C++11代码,安装的g++的版本完全支持C++,这样可以测试gcc和g++版本不一致是不是会产生一些问题或者说是一个什么样的情况。)
如果没有安装g++,是没有办法编译C++代码的。gcc编译C++代码只是一个壳动作,真正编译是转交给了g++的。gcc链接C++动态库时,也是需要使用g++的。
很多人要么就是把gcc和g++混为一谈,要么就是根本就搞不清楚,非常混乱。然而我仔细研究之后,才发现并不复杂。
gcc最开始就仅仅是C语言的编译器,后来支持更多的语言了,其中包括C++。所以gcc已经变成了编译器选择器。不过gcc的基本属性,即编译C语言的能力还是存在的。而其他语言则要传递给其他的编译器组件。这也是我们安装时是指定gcc-c++的原因了,C++编译器即g++成为了gcc编译器集合中的一个组件而已。
当然,以上都是我个人的一个大致的分析和理解,足以支持初学者了解基本的背景了。我作为一个初学者,只是因为认真研究了,总体的认识还是对的,至于太具体的细节,可能认知有限而错误。如果是这样,希望您能够指正。
from(codexia)