Linux环境中gcc和g++的区别详解

栏目: 服务器 · 编程工具 · 发布时间: 6年前

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

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

工具用法介绍

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

Linux环境中gcc和g++的区别详解

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

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

注意:由于g++和gcc的用法相同,所以在这里我们就不直接介绍了

gcc和g++的区别

编译c程序

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

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

编译cpp程序

既然二者对c程序来说都一样的,那为什么两者都存在而不是只存在一个呢,不要着急,下面我们来看看他们分别是如何来编译C++程序的.

首先我们直接编译c文件生成可执行程序: 

Linux环境中gcc和g++的区别详解 我们发现gcc报错,而g++没有报错,并且可以执行。

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

预处理

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

编译

Linux环境中gcc和g++的区别详解

我们发现gcc编译test1.i(.cpp生成)的会出现大篇幅的错误,图片中的错误主要是说无法找到cout函数的库文件,而g++去可以通过编译并且生成汇编文件,这件事情说明gcc无法自动和c++的库文件进行连接,导致了库函数没有申明的错误.

汇编

这个过程应该都没有问题,因为这个过程只是将后缀为.s文件中的汇编语言转换成了相应的机器语言。所以gcc和g++应该在这个过程中做了同样的事情。

链接

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

总结

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

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-10/155027.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Building Websites with Joomla!

Building Websites with Joomla!

H Graf / Packt Publishing / 2006-01-20 / USD 44.99

This book is a fast paced tutorial to creating a website using Joomla!. If you've never used Joomla!, or even any web content management system before, then this book will walk you through each step i......一起来看看 《Building Websites with Joomla!》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具