当前位置: 首页 > news >正文

gcc 与 g++的区别

原文: http://www.cnblogs.com/wb118115/p/5969775.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

6.        在用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++ -ohelloworld -I/homes/me/randomplace/include helloworld.C

转载于:https://www.cnblogs.com/Ph-one/p/11519985.html

相关文章:

  • Linux中显示系统中USB信息的lsusb命令
  • uboot自定义添加命令
  • uboot移植spi驱动
  • 训练一个神经网络 能让她认得我
  • Matlab注释的几个方法
  • Matlab 图像平移、旋转、缩放、镜像
  • 调整图像大小调整图片大小
  • matlab图像灰度调整——imadjust函数的使用
  • Matlab实现直方图均衡化
  • 图像处理之图像的平滑与锐化
  • Matlab常用函数
  • 空间域平滑滤波器
  • github免费私有仓库使用
  • android.mk-include
  • imfilter
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • GraphQL学习过程应该是这样的
  • Java反射-动态类加载和重新加载
  • mongo索引构建
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • nodejs调试方法
  • OSS Web直传 (文件图片)
  • React-Native - 收藏集 - 掘金
  • React-redux的原理以及使用
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 手机端车牌号码键盘的vue组件
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • (20050108)又读《平凡的世界》
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (九)信息融合方式简介
  • (四) 虚拟摄像头vivi体验
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (状压dp)uva 10817 Headmaster's Headache
  • ... 是什么 ?... 有什么用处?
  • .NET MVC 验证码
  • .NET Standard 的管理策略
  • .net 程序发生了一个不可捕获的异常
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net下的签名与混淆
  • @Autowired和@Resource装配
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [HUBUCTF 2022 新生赛]
  • [IE技巧] IE8中HTTP连接数目的变化
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • [LeetCode] Max Points on a Line
  • [Mvc]在ASP.NET MVC中使用Repeater
  • [Noi2015]程序自动分析