首页 > 其他分享 >gcc g++ 含义与区别

gcc g++ 含义与区别

时间:2023-03-11 21:48:21浏览次数:31  
标签:文件 gcc ++ 含义 编译 编译器 下载

gcc g++ 含义与区别


一、什么是gcc

​ GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器。目前 Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。

1.1 gcc与g++的安装

# 安装软件必须要有管理员权限
# Ubuntu
$ sudo apt update           # 更新本地的软件下载列表,得到最新的下载地址
$ sudo apt install gcc      # 通过下载列表中提供的地址下载gcc安装包,并安装
$ sudo apt install g++      # 通过下载列表中提供的地址下载g++安装包,并安装

# Centos
$ sudo yum update           # 更新本地的软件下载列表,得到最新的下载地址
$ sudo yum insrall gcc      # 通过下载列表中提供的地址下载gcc安装包,并安装
$ sudo yum install g++      # 通过下载列表中提供的地址下载g++安装包,并安装

​ gcc安装完毕后,可以通过gcc --version命令查看版本:

二、gcc/g++工作流程

​ GCC 编译器对程序的编译下图所示,分为 4 个阶段:预处理(预编译)、编译和优化、汇编和链接。GCC 的编译器可以将这 4 个步骤合并成一个。

预处理:在这个阶段主要做了三件事:展开头文件、宏替换、去掉注释。这个阶段需要gcc调用预处理器来完成,最终得到的还是源文文本格式;

编译:这个阶段需要gcc调用编译器对文件进行编译,最终得到一个汇编文件;

汇编:这个阶段需要gcc调用汇编器对文件进行汇编,最终得到一个二进制文件;

链接:这个阶段需要gcc调用链接器对程序需要调用的库进行链接,最终得到一个可执行的二进制文件;

gcc编译选项 说明
-E 预处理指定的源文件,不进行编译
-S 编译指定的文件,但不进行汇编
-c 编译、汇编指定的源文件,但是不进行链接
-o [file1] [file2] / [file2] -o [file1] 将文件file2编译可执行文件file1
-I directory 指定include包含文件的搜索目录
-g 在编译的时候,生成调试信息,该程序可以被调试器调试
-D 在程序编译的时候,指定一个宏

2.1 g++编译示例

源码

第一步:对源文件进行预处理,需要使用g++参数为 -E

第二步:与便于处理之后的文件,需要使用gcc参数-S

第三步:对得到的汇编文件进行汇编,需要使用gcc参数为-c

第四步:将得到的二进制文件和标准库紧致链接,得到可执行的二进制文件,不需要任何参数

第五步:运行

在使用gcc编译程序的时候可以通过参数控制内部自动执行几个步骤(命令: gcc/g++ xxx.cpp -o xxxexe)

标签:文件,gcc,++,含义,编译,编译器,下载
From: https://www.cnblogs.com/blackimp/p/17207038.html

相关文章

  • c++模板
    函数模板两个不同类型参数自动推断返回类型自动推断返回类型template<typenameT1,typenameT2>//typename是比较新的写法,老版中也可以写成classautomax(T1a,T2......
  • c++11标准右值引用, 移动语义和完美转发
    0.序言学习自C++RvalueReferencesExplained(thbecker.net)1.引入1.1拷贝间接资源如果一个类的成员变量有指针,例如classMyClass{public:T*element;}......
  • C++从txt中读取矩阵
    1.分析给定一个txt数据,中间由空格分割,目标是读取数据,以便后续使用。由于不清楚数据大小,为了方便管理,采用vector容器作为存贮对象。   2.程序下面是读取的方法......
  • 一个网络和串口全双工通信的c++库
    欢迎指正概述该库是https://github.com/ZLMediaKit/ZLToolKit和https://github.com/itas109/CSerialPort的集合这是一个通信库,包括网络和串口通信网络包括:TCP客户端......
  • 第 1 章 C++编程基础 Basic C++ programming
    1.1如何撰写C++程序_HowtoWriteaC++Program练习1.4,在终端上让用户输入fastname和lastname并打印出来练习1.4#include<iostream>#include<vector>#include......
  • gcc 10+ 编译 git第一个提交(本文会持续修改)
    安装gcc10+在编译的时候有时会出现multiple-definition的错误。(会从源码编译gcc的可以路过)。 实在想不出解决重定义的办法。但有一种凑活的办法:cache.h中添加#includ......
  • 对C++做爬虫的代码进行简单分析
    有这样一段代码#include<stdio.h>#include<tchar.h>#include<windows.h>#include<urlmon.h>#pragmacomment(lib,"urlmon.lib")intmain(){ TCHARurl[]=TE......
  • C# 调用 c++ DLLL试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B
     网上各种设置目标编译平台为x86都解决不了问题,有可能是DLL依赖的文件的位数有问题1、先查一下被调用的DLL用了那些DLLvs的开发人员工具控制台输入 dumpbin/depe......
  • C++ 标准库中的 vector
    标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象,都有一个与之对应的索引,索引用于访问对象。vector是一个类模板,编译器根据模板创建类或者函......
  • C++ | 計算兩點的角度
    #include<math.h>#include<iostream>#include<stdio.h>#definePI3.141592654#defineEARTH_RADIUS6378.137//地球近似半徑u......