Duanxx的C++学习: gcc和g++

其实在这之前,我一直以为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> - name of the output file

-c - output an object file (.o)

-I<include path> - specify an includedirectory

-L<library path> - specify a libdirectory

-l<library> - link with librarylib<library>.a

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

时间: 2024-12-14 08:30:23

Duanxx的C++学习: gcc和g++的相关文章

gcc 与 g++的区别

原文: http://www.cnblogs.com/wb118115/p/5969775.html ------------------------------------------------------------------------------------ 看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g++的区别. 先描述一下今天遇

Linux下安装gcc 、g++ 、gfortran编译器

一.ubuntu下gcc/g++/gfortran的安装 1.安装 (1).gcc ubuntu下自带gcc编译器.可以通过“gcc -v”命令来查看是否安装. (2).g++ 安装g++编译器,可以通过命令“sudo apt-get install build-essential”实现. 执行完后,就完成了gcc,g++,make的安装.build-essential是一整套工具,gcc,libc等等. 通过“g++ -v”可以查看g++是否安装成功. 注:“sudo apt-get inst

【Linus】配置gcc、g++和gdb

从 Linux中使用gcc来编译C程序,使用g++来编译C++程序,使用GDB来调试程序,这些使用工具都需要自己进行安装,那么应该怎样配置这些工具呢? 1.查看vim信息,并查看是否存在.vimrc和.viminfo这样的配置文件 2.配置gcc.g++ Centos中使用yum来配置gcc和g++. 若要安装gcc,则在命令行中输入:yum -y install gcc,按回车键就能够进行gcc的安装:若要安装g++,则需要在命令行中输入:yum -y install gcc++,就能够进行g

怎样在Centos中配置gcc、g++、和gdb?

linux中使用gcc来编译C程序,使用g++来编译C++程序,使用GDB来调试程序,这些使用工具都需要自己进行安装,那么应该怎样配置这些工具呢? 首先,在命令行中输入vi查看一下vim的信息如下: 然后,输入ls -a查看是否存在.vimrc和.viminfo这样的配置文件,结果如下: 1.配置gcc.g++ Centos中使用yum来配置gcc和g++,若要安装gcc,则在命令行中输入:yum -y install gcc,按回车键就能够进行gcc的安装,若要安装g++,则需要在命令行中输入

gcc与g++的一些关系

Gcc 简介Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.Gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%. gcc是linux的唯一编译器,没有gcc就没有linux,gcc的重要性就不可言喻啦. 一:gcc与g++比较 编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而 c++代码用g++,或者说编译用

GCC与G++那些事儿

StackOverflow上一个很有名的问题,gcc和g++到底有什么区别? 答案如下: GCC: GNU Compiler Collection 指的是GNU编译器所支持的所有不同的类型的语言 gcc: GNU C  Compiler g++:GNU C++ Compiler 主要的区别在于: 1.gcc会将.c文件和.cpp文件分别当做C和C++来编译. 2.g++会将.c文件和.cpp文件都当做c++文件来编译. 3.如果使用g++链接目标文件,它会自动链接std C++ lib.然而gc

Duanxx的图像处理学习: 透视变换(二)

在<Duanxx的图像处理学习:透视变换(一)>中简要的说明了透视变化的算法,这里再进一步的对透视变换做说明. 基于前面的说明,可以很容易发现, 一个变换矩阵有如下你的分区特性: 一般来说,我有一个三维变换矩阵如下: 矩阵中的元素(p , q , r)取非全0时,能产生透视效果 一.一点透视 来看下面一张图: 现在是以z轴上的一点(0,0,d,1)为投影中心,计算P(x,y,z,1)点在XOY平面上的透视投影. 那么,现在很容易知道: 即: 这里取: 那么变换矩阵T,就为: 结果的其次坐标表示

Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

gcc和g++的区别【转自中国源码网】

gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的.C++的语法规则更加严谨一些.2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接