gcc和g++的区别:安装、版本、编译(转)
用以下命令:
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)
gcc和g++的区别:安装、版本、编译(转)的更多相关文章
- 结合python版本安装python-devel gcc和g++的区别 安装前做yum搜索
[test@ecs autocloudservices]# yum install python-develLoaded plugins: fastestmirrorLoading mirror sp ...
- Linux - gcc和g++的区别
一般linux系统都自带了gcc编译器的,你可以用你的安装光盘去安装,如果你是觉得自带的gcc版本太低了,可以去gcc的官方网站可以下载到,编译需要很长的时间,如果你只编译C或者C++可以只下载gcc ...
- 【转载】gcc和g++的区别
[说明]本文转载自 静心 的文章 http://blog.163.com/lu_jun520/blog/static/5699613420116205148239/ 一般linux系统都自带了gcc编 ...
- gcc和g++的区别【转自中国源码网】
gcc和g++的区别[转自中国源码网] gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是 ...
- linux中gcc和g++的区别
1.两者都是编译器 2.gcc编译c语言:g++既可以编译c语言,也可以编译c++语言 3.gcc不能自动链接库文件,一般用g++来链接库文件,非要用gcc的话,一般使用gcc -lstdc++命令 ...
- gcc 与 g++的区别
原文: http://www.cnblogs.com/wb118115/p/5969775.html ------------------------------------------------- ...
- 【C/C++】Linux的gcc和g++的区别
Windows中我们常用vs来编译编写好的C和C++代码:vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢,其实Linux下这样的工具有很多 ...
- gcc 与g++的区别
原文 http://www.cnblogs.com/wb118115/p/5969775.html 什么是gcc / g++ 首先说明:gcc 和 GCC 是两个不同的东西 GCC:GNU Compi ...
- gcc、g++、gdb安装
Windows安装 有闲工夫在Windows上安装g++/gcc/gdb,还不如装个虚拟机安装Linux,在Linux上安装 但是我还是要讲的 首先,需要安装MinGW,MinGW,是Minimali ...
随机推荐
- MySQL快速回顾:更新和删除操作
前提要述:参考书籍<MySQL必知必会> 6.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE: 更新表中特定的行: 更新表中所有的行. U ...
- MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署
在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...
- C++ string 常用函数
C++ String常用函数 一,类型别名 size_type 无符号整型 iterator 迭代器类型 const_iterator 只读迭代器 reverse_iterator 逆序迭代器 con ...
- ES6的Object.assign()基本用法
Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target). 例如: const target = {a:1}, const source1 ...
- FWT 入门
#include <bits/stdc++.h> using namespace std; #define ll long long const ll maxn = 3e5+5; cons ...
- VMware Workstation CentOS7 Linux 学习之路(4)--守护服务(Supervisor)
目前存在三个问题 问题1:ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现ASP.NET Core应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生 ...
- 测试必备之Java知识(二)—— Java高级的东西
Java高级 类加载过程 加载(创建class对象) -> 连接(验证-准备-解析) -> 类初始化 类加载器类别 根类加载器:加载java核心类 扩展类加载器:加载JRE目录中的jar包 ...
- 让你的 Linux 命令骚起来
目录 管道符号 " | " grep sed awk sort comm uniq tr cat head tail wc find tsort tee 「>」重定向符号 「 ...
- 在 ASP.NET Core 程序启动前运行你的代码
一.前言 在进行 Web 项目开发的过程中,可能会存在一些需要经常访问的静态数据,针对这种在程序运行过程中可能几乎不会发生变化的数据,我们可以尝试在程序运行前写入到缓存中,这样在系统后续使用时就可以直 ...
- Docker + node(koa) + nginx + mysql 开发环境搭建
什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然 ...