参考网易博客者“静心”的博客——《gcc与g++的区别》结合自己的认识做出的个人领悟。(由于个人水平有限,难免会存在错误的地方,请见谅)

一般而言,在Linux下编译程序分为以下4个阶段:

  1. 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件   
  2. 编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件   
  3. 汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件   
  4. 连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件
在Linux下执行gcc与g++编译C++文件的差别:
  1. 后缀为.c的,gcc把它当作是C程序(cc/cpp才判定为C++源程序),而g++当作是c++程序
  2. gcc无法进行库文件的连接,即无法编译完成步骤4;而g++则能完整编译出可执行文件。(实质上,g++从步骤1-步骤3均是调用gcc完成,步骤4连接则由自己完成)
下面进行一次简单的测试:
测试环境:CentOS 6.4
测试命令:
  1. gcc -E 执行到步骤1,只处理宏命令,需要用重定向生成文件
  2. gcc -S 执行到步骤2,生成文件.s
  3. gcc -c 执行到步骤3,生成文件.o
  4. g++ 分别编译于连接 .cc文件与.o文件
测试代码:
#include <iostream>
using namespace std;
int main()
{
    cout<<"This is a C++ program."<<endl;
}

测试结果:

gcc -E 1.cc >> 1.i

vi 1.i



gcc -S 1.cc

vi 1.s




gcc -c 1.cc




接下来测试g++ 1.o 与直接g++ 1.cc的结果:
g++ 1.o -o from_o



运行结果:



g++ 1.cc -o from_cc



运行结果:



若直接用gcc编译链接c++文件会出错,因无法链接。
gcc 1.cc




Linux 下 gcc 与 g++的差别的更多相关文章

  1. Linux下gcc与g++用法以及编写makefile

    1.         gcc与g++编译流程: 1)         编译流程: 2)         预处理:生成.i的预处理文件. Ø 只激活预处理,这个不生成文件,需要把它重定向一个输出文件. ...

  2. Linux下gcc和g++的区别

    首先编写了第一个C++程序,Hello,world! #include <iostream> using namespace std; void main() ...{ cout < ...

  3. Linux下gcc和g++编译helloworld

    linux C(hello world) 1.使用vi/vim进行编写代码并保存为hello_world.c.如下: 1 2 3 4 5 6 /* This is my first C program ...

  4. Linux下gcc,g++,gdb,scon部分用法笔记

    1 Ubuntu下编译安装GCC-4.1.2 拷贝gcc-4.1.2.tar.bz2(我下载的压缩文件)到/usr/local/src 解压 新生成的gcc-4.1.2这个目录被称为源目录,用${sr ...

  5. linux 安装gcc和g++

    linux中安装gcc和g++ 今天在linux的服务器上安装C/C++的编译器gcc和g++,运行了如下两条命令: 1 yum install gcc yum install g++ 然后发现gcc ...

  6. Linux中gcc和g++

    今天在Linux上编写一个小的C++程序运行,需要用到iostream中cout,一开始创建一个hello.c的文件编写如下代码: #include<stdio.h> #include&l ...

  7. Linux下gcc与gdb简介

    gcc编译器可以将C.C++等语言源程序.汇编程序编译.链接成可执行程序.gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具. linux下没有后缀名的概念.但 gcc 根据文件的后 ...

  8. linux下gcc编译多个源文件、gdb的使用方法

    一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认 ...

  9. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

随机推荐

  1. 应用服务&领域服务

    应用服务&领域服务 DDD理论学习系列——案例及目录 1. 引言 单从字面理解,不管是领域服务还是应用服务,都是服务.而什么是服务?从SOA到微服务,它们所描述的服务都是一个宽泛的概念,我们可 ...

  2. OC NSMutableArray

    #import <Foundation/Foundation.h> #import "Student.h" void arrayCreate() { NSMutable ...

  3. 使用ArcSDE SQL操作怎么获得新对象的objectid、GUID

    arcgis9.3.1 现在大家很喜欢使用ArcSDE的SQL操作,这种方式在特殊的环境要求下显得比较方便,那么使用SQL操作最多的是读和写,而写最多的就是新建一个对象,那么翻译成SQL语言就是使用i ...

  4. Python解析配置文件模块:ConfigPhaser

    算是前几周落下的博客补一篇.介绍一下python中如何解析配置文件.配置文件常用的几种格式:xml,json,还有ini.其中ini算是最简单的一种格式,因为小,解析的速度也要比xml和json快(并 ...

  5. PHP------数组的遍历

    echo current($attr); //取当前元素的value值 echo key($attr); //取当前元素的key next($attr); //将数组里面的指针指向下一个(向下移)pr ...

  6. Html5的本地储存 Web Storage

      Html5 中的存储包括两种:sessionStorage 和 localStorage   sessionStorage 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话 ...

  7. 高考结束了,在门头沟有没有想学php建站的。

    教你简单的html 教你文章后台管理 数据库管理及备份 编程工具的使用 如何找到你要学习的内容

  8. 用HTML编写迪士尼乐园页面

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/html"><head lang="e ...

  9. 课时48.表单标签-H5(了解)

    可以自动校验输入的内容是否符合邮箱的格式,我带大家随便看几个就行了,因为大部分浏览器对这几个特性有的支持,有的不支持,所以大家只要了解就好了   

  10. iOS 杂笔-26(苹果禁用热更新)

    iOS 杂笔-26(苹果禁用热更新) 苹果爸爸禁用热更新小伙伴们有什么想说的吗? 苹果爸爸禁用热更新小伙伴们有什么想说的吗? 苹果爸爸禁用热更新小伙伴们有什么想说的吗?