https://www.cnblogs.com/samewang/p/4774180.html

看的Linux公社的一篇文章,觉得不错,内容复制过来了。

其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g++的区别。

先描述一下今天遇到的错误:

因为以前写程序的时候,写的都是cpp文件,然后就直接使用g++编译,没出错,也就没有在意过这些问题,今天有一个c文件,但里面包含后STL中的vector语法,想着使用gcc来编译,结果报错了,报错是:找不到vector。

什么是gcc / g++

首先说明:gcc 和 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++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,比如,用gcc编译一个c文件的话,会有以下几个步骤:

Step1:Call a preprocessor, like cpp.

Step2:Call an actual compiler, like cc or cc1.

Step3:Call an assembler, like as.

Step4:Call a linker, like ld

由于编译器是可以更换的,所以gcc不仅仅可以编译C文件

所以,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler

gcc和g++的主要区别

  1. 对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)

  2. 对于 .c和.cpp文件,g++则统一当做cpp文件编译

  3. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL

  4. gcc在编译C文件时,可使用的预定义宏是比较少的

  5. gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏,这些宏如下:

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
  1. 在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个
主要参数-g - turn on debugging (so GDB gives morefriendly output)-Wall - turns on most warnings-O or -O2 - turn on optimizations-o - name of the output file-c - output an object file (.o)-I - specify an includedirectory-L - specify a libdirectory-l - link with librarylib.a

使用示例:g++ -o helloworld -I /homes/me/randomplace/include helloworld.C

GCC的gcc和g++区别,本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已相关推荐

  1. C++代码片段(二)判断可变模板参数中是否包含某一特定类型

    首先定义基础模板类,表示不包含给定类型 template <typename T, typename... Args> struct contains : public std::fals ...

  2. linux编译器 如何处理函数,在linux系统中,编译c程序,如何调用fmod函数

    1. 编译指示指令 C和C++的每个实现对它的主机或操作系统都支持一些独有的特征.例如,某些程序须对存放数据的存储器区域进行精确的控制,或必须控制特定函数接受参量的方式.#pragma指令对每个编译器 ...

  3. C++代码片段(三)过滤可变模板参数中某些类型的变量

    将可变模板参数列表中的某些类型过滤掉,然后返回剩下数据的元组.用到了上一篇中的判断可变模板参数中是否包含某一特定类型的方法 #include <iostream> #include < ...

  4. 编译器cc、CC、gcc、g++区别

    编译器cc.CC.gcc.g++区别 看C语言经典教材<C程序设计语言>中,Linux下编译C代码用的是cc, 广为人知的C编译器的gcc, 还有CC.g++那么有啥差异呢 一.cc是Un ...

  5. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

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

    gcc/g++是什么 gcc/g++之间的区别和联系 gcc/g++是什么 讲到gcc/g++,那就得先说一下GCC,GCC:GNU Compiler Collection(GUN 编译器集合),它可 ...

  7. C++ 笔记(01)— 环境设置(安装g++、g++ 编译 C++、 生成可执行文件流程、解释器与编译器区别)

    1. g++安装 在 Linux 或者 UNIX 系统上,可以通过下面命令来查看是否安装了 GCC . $ g++ -v 如果已经安装 GNU 编译器,则有以下输出: wohu@wohu:~/C++$ ...

  8. GCC背景强大? 探寻linux系统下GCC编译器的背后故事!

    这里写自定义目录标题 一.在vim和gcc编译环境下生成.a静态库和.so动态库 汇编部分 关于链接 分析ELF文件 反汇编ELF 二.gcc生成静态库和动态库 调用静态库 动态库与静态库的比较 静态 ...

  9. linux debian 安装gcc,如何在Debian 10 Linux上安装GCC编译器

    GNU编译器集合(GCC)是支持C,C ++,Objective-C,Fortran,Ada,Go和D编程语言的编译器和库的开源集合. Linux内核,GNU实用程序和许多其他项目都是使用GCC编译的 ...

  10. cmakeLists.txt中增加-g选项不生效/gcc -s参数

    某项目中,编译昇腾的demo时,在CMakeLists.txt中增加了 add_definitions("-Wall -g") 然后编译出来的可执行程序就是没法打断点,说明没有包含 ...

最新文章

  1. 学习Modern UI for WPF
  2. java 最小化 api_Java的API设计实践
  3. 为什么人工智能被过度炒作?
  4. 深度linux卡在扫描硬盘,linux使用badblocks命令扫描硬盘排除故障
  5. 根据FileUpload控件名获取上传文件(大小)类型
  6. CF1070L Odd Federalization 高斯消元
  7. ext4fs error mysql_请教一个 Linux 挂在磁盘阵列报错 EXT4-fs error 问题
  8. 关于ZooKeeper集群脑裂及其解决方案
  9. 各种集合key,value能否为null
  10. 【Pytorch版本】损失函数大汇总
  11. 分布式保存Session 和 StateServer 解决 Session过期
  12. Oracle数据库概述
  13. 应用进展_解释的标准事件:第2部分–应用和进展
  14. 未受信任的企业级开发者_在 iOS 上安装自定企业级应用
  15. ACM144-小柯的烦恼zy
  16. ubuntu root账户下添加和删除用户
  17. 台式计算机用u盘给电脑安装系统,台式机用u盘装系统,教您用u盘装系统给台式机...
  18. ⅰcp经济模型_简单介绍一下R中的几种统计分布及常用模型
  19. 设计师都在用的6个免费设计素材网站~
  20. 记录锁、间隙锁和临键锁

热门文章

  1. 【ArcGIS|空间分析】栅格数据缓冲区分析-学校选址
  2. error C2065等:******未声明的标识符错误
  3. 利用Docker学习Redis笔记(一)
  4. 文科可报考计算机专业会怎样,高考志愿填报文科考生能够报考计算机吗?哪些学校会有招生?...
  5. 打造狂拽炫酷的主流自定义侧滑控件(仿酷狗和QQ5.0)
  6. mac 卸载ssh 重新安装mysql,linux下彻底卸载MySQL
  7. 肌电信号 原始信号 积分_实验室人必看!复杂的色谱峰要如何正确积分?
  8. 华擎 j3455 时钟 linux,经验 篇一:华擎J3455 硬改MAC地址
  9. 第一周练习代码以及备注
  10. 凯撒密码加密,解密的实现,可以在项目上使用