Windows中我们常用vs来编译编写好的C和C++代码;vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢,其实Linux下这样的工具有很多,但我们只介绍两款常用的工具,它们分别是gcc和g++.

工具用法介绍

gcc和g++的用法都是一样的,在这里我们只介绍gcc:

上图介绍了相关指令和参数以及该条指令所做的对应的事情。

  1. gcc -E filename.c -o filename.i
    将c文件转化成C++文件,这个过程也叫做预处理过程
  2. gcc -S filename.i -o filename.s
    将预处理过程生成的.i后缀的文件转化成汇编文件,里面存储的是相应的汇编代码,这个过程叫做编译。
  3. gcc -c filename.s -o filename.o
    将汇编文件中的汇编代码翻译成相应的机器语言,这个过程叫做汇编。
  4. gcc filename.o -o filename.exe
    这条指令是完成链接这个过程的,它通过链接器ld将运行程序的目标文件和库文件链接在一起,生成最后的可执行文件
  5. 生成可执行文件后,我们就能够调用相应的程序了。
    注意:由于g++和gcc的用法相同,所以在这里我们就不直接介绍了

gcc和g++的区别

编译c程序

熟悉C++的人应该都知道,C++是C语言的超集,编写C/C++代码的时候,有人用gcc,也有人用g++,我们先来看看gcc和g++是否都能编译C++和C代码:

上图中,我们发现用gcc和g++分别编译test.c这个c文件,发现都是可执行的,实际上对于C文件gcc和g++所做的事情确实是一样的,g++在编译C文件时调用了gcc.

编译cpp程序

既然二者对c程序来说都一样的,那为什么两者都存在而不是只存在一个呢,不要着急,下面我们来看看他们分别是如何来编译C++程序的.
首先我们直接编译c文件生成可执行程序:

我们发现gcc报错,而g++没有报错,并且可以执行。

下面我们来看看它们的具体步骤以及错误原因:

  1. 预处理

    在预处理阶段两条命令都能够成功,并且我们观察gcc和g++各自产生的.i后缀的文件,它们的内容都是相同的,所以我们能够发现gcc和g++在cpp程序中它们做了相同的事情。
  2. 编译

    我们发现gcc编译test1.i(.cpp生成)的会出现大篇幅的错误,图片中的错误主要是说无法找到cout函数的库文件,而g++去可以通过编译并且生成汇编文件,这件事情说明gcc无法自动和c++的库文件进行连接,导致了库函数没有申明的错误.
  3. 汇编
    这个过程应该都没有问题,因为这个过程只是将后缀为.s文件中的汇编语言转换成了相应的机器语言。所以gcc和g++应该在这个过程中做了同样的事情。
  4. 链接

    这个阶段也出现了问题,用gcc将.cpp后缀产生的.o文件转换成可执行文件时出现了错误,而g++却可以转换成功并且能够正确执行。这个还是因为gcc无法将库文件与.o后缀的文件关联在一起生成可执行程序,而g++可以完成这项工作。

总结

gcc和g++的区别主要是在对cpp文件的编译和链接过程中,因为cpp和c文件中库文件的命名方式不同,那为什么g++既可以编译C又可以编译C++呢,这时因为g++在内部做了处理,默认编译C++程序,但如果遇到C程序,它会直接调用gcc去编译.

Linux的gcc和g++的区别相关推荐

  1. Linux下GCC与G++的区别和联系

    原文链接:https://www.linuxidc.com/Linux/2008-03/11943.htm GCC and g++分别是gnu的c & c++编译器 GCC/g++在执行编译工 ...

  2. 【Linux】gcc和g++的区别

    gcc和g++编译器的区别 gcc 现在是 gnu 提供的一些编译器工具的集合(Gnu Compiler Collection),以前是gnu 组织提供的 c 编译器(Gnu C Compiler). ...

  3. gcc和g++的区别[zz]

    很多人不是很明白GCC与G++的区别 gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的,gcc把它当作 ...

  4. gcc和g++的区别

    gcc和g++都是GNU(组织)的一个编译器. 误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后 ...

  5. cc、gcc、g++ 的区别和联系

    2018-02-24 创建人:Ruo_Xiao 邮箱:xclsoftware@163.com cc 是 Unix 系统的 C Compiler,在 linux 下一般连接到 gcc . gcc 的全称 ...

  6. linux下gcc、g++不同版本的安装和切换

    Ubuntu 18.04预装GCC版本为7.3,但有时在编译是需要用的不同gcc版本,下面介绍,如何安装不同的gcc 和g++,并设置根据不同的需要在不同版本之间切换. 1. 可以通过如下命令查看当前 ...

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

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

  8. gcc和g++有什么区别?

    来源 | C语言中文网 发展至今,GCC 编译器已经更新至 V10 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ . 除此之外,当下的 GCC 编译器还支持编 ...

  9. 【Linux】gcc/g++

    目录 一.概念 二.语法 三.动/静态库 四.关于文件名后缀问题 一.概念 gcc/g++是linux系统中的编译器,是一款软件.该软件只负责编译,与Windows下的vs系列的差别就是:vs系列是一 ...

最新文章

  1. C++实现CString和string的互相转换
  2. Spring Cloud:多网卡问题
  3. 删除字符串中的所有相邻重复项
  4. Response.Write具体介绍
  5. 信息量、熵、交叉熵、KL散度、JS散度杂谈
  6. 市场营销分析--页面广告统计
  7. css3位移过度效果,详解Css3新特性应用之过渡与动画
  8. openjdk 配置linux环境变量,linux中使用openjdk配置java环境变量
  9. 通过BeanDefinitionReader获取BeanDefinition的三种不同方式
  10. matlab四节点矩形单元的应变,四节点矩形单元有限元分析
  11. 汽车厂自制的流水线边 物料亮灯防错系统
  12. 计算机网络嗅探实验,网络嗅探与欺骗实验
  13. 直流有刷电机驱动项目需求分析
  14. R语言与多元线性回归方程及各种检验
  15. [CTF] 关于php代码审计的MD5类的练习
  16. qiime2安装后的使用
  17. 取消Outlook脱机工作
  18. Colab平台使用(GPU、挂载、tf版本、运行py脚本、设置点击脚本)
  19. AutoTools 疑难解决方法
  20. STM32F103系列驱动MH-Z14A 二氧化碳(CO2)传感器详解,使用串口输出读取(后附免费免积分程序下载链接)

热门文章

  1. 帅气的胡歌,谁能比?
  2. 华为 跨域虚拟专用网络-OptionB方案
  3. SDUT 简单枚举类型——植物与颜色
  4. python的tkinter做界面连接MySQL(上)
  5. sql 获取记录表中的最新状态
  6. 计算机内存的故障,电脑内存损坏后的故障表现及其简单处理方法
  7. 蟑螂为什么叫"小强"
  8. 逆水寒7.25服务器维护,玩法改动_逆水寒7月25日更新_7月25日改动_3DM网游
  9. 从360公司年会特等奖是“免裁券”想到的
  10. html页面手机自动缩放,解决HTML5手机端页面缩放的问题