Linux的编译器gcc/g++

news/2024/10/31 3:21:06/

Linux的编译器gcc/g++

  • gcc如何完成?(g++同理)
    • 预处理(进行宏替换)
    • 编译(生成汇编)
    • 汇编(生成机器可识别代码)
    • 链接(生成可执行文件或库文件)

gcc只能用来编译c语言,g++既可以用来编译c语言也可以用来编译c++

首先我们需要检查当前是否安装了gcc/g++?
gcc/g++ -v 查看当前版本的gcc/g++版本
在这里插入图片描述
如果没有安装,则 sudo yum install -y gcc-c++

gcc如何完成?(g++同理)

gcc 【选项】 要编译的文件 【选项】 目标文件

选项功能
-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S编译到汇编语言不进行汇编和链接
-c编译到目标代码
-o文件输出到 文件
-stasic此选项对生成的文件采用静态链接
-g生成调试信息。GNU 调试器可利用该信息。
-O0 -O1 -O2 -O3编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w不生成任何警告信息。
-Wall生成所有警告信息。

在这里插入图片描述

预处理(进行宏替换)

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。(a.去注释 b.宏替换 c.头文件展开 d.条件编译)
预处理指令是以#号开头的代码行。
实例: gcc –E test.c –o test.i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。在这里插入图片描述在这里插入图片描述
预处理过后,程序还是c语言

编译(生成汇编)

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查
无误后,gcc 把代码翻译成汇编语言
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc –S test.i –o test.s
在这里插入图片描述
在这里插入图片描述

汇编(生成机器可识别代码)

汇编阶段是把编译阶段生成的“.s”文件转成目标文件
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码
实例: gcc –c test.s –o test.o
在这里插入图片描述

在这里插入图片描述

链接(生成可执行文件或库文件)

在成功编译之后,就进入了链接阶段。
实例: gcc test.o –o test
在这里插入图片描述


http://www.ppmy.cn/news/292783.html

相关文章

maven打完jar包之后将jar包放到指定位置总结之五种方法

一、方式一&#xff1a;通过maven-jar-plugin指定outputDirectory输出路径 可以排除某些配置文件&#xff0c;没有文件夹的话会自动创建&#xff01; <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifac…

linux gcc/g++编译安装 gcc7.5.0 c++17

linux C17编译&#xff1a; 编译指定参数 -stdc17 编译指定参数 -stdc17 例&#xff1a;g -stdc17 main.cpp #如果编译器不支持c17就会提示&#xff1a;g: error: unrecognized command line option ‘-stdc17’ 方法&#xff1a; 1.下载高版本gcc 建议7.3以上 wget http://m…

Ubuntu没有gcc, g++处理

没有gcc, g&#xff0c;不能使用sudo apt-get install 安装&#xff0c; 提示Lock; 创建如下脚本&#xff0c;执行后再使用sudo apt-get install gcc安装即可 #! /bin/bash #先使用下面的语句 #sudo killall apt apt-all #提示如下内容&#xff0c;继续使用下面的语句处理…

ubuntu安装g++/gcc 7版本

安装gcc-7/g -7 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-7 sudo apt-get install g7 修改本地gcc/g版本&#xff0c;首先设置优先级 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100 sud…

关于hadoop 在浏览器中看hdfs

最近在折腾 hadoop 在物理机中用浏览器访问hdfs 点击 Browse the filesystem 浏览器中的地址栏 从 http://hunter-lenovo-g475:50070/dfshealth.jsp 变成 localhost... 然后在网上找了资料说是 物理机的hosts 文件没配&#xff0c;但实际上并不是 。我用ip 和主机名…

FinalShell界面左侧为什么能够监测系统指标动态变化的原理

前言&#xff1a; 我们可以看出FinalShell是用Java写的&#xff0c;具体怎么看出来的&#xff0c;不能光看界面logo是Java的logo&#xff0c;还要进它的安装目录下进行查看是否真是用Java编写的&#xff01;&#xff01;&#xff01; 具体查看如下&#xff1a; 查看finalshe…

插件化技术

插件化技术 一.概述二.原理三.好处四.插件化涉及到的技术以及常用的插件化框架五.详细说明1.第一个问题&#xff1a;类加载&#xff08;1&#xff09;Android 项目中&#xff0c;动态加载技术按照加载的可执行文件的不同大致可以分为两种&#xff1a;&#xff08;2&#xff09;…

Pull Request完整过程【记一次给antvis:G6的PR】

文章目录 前言Bug 重现问题排查解决方案old versionnew version收到回复 PR提交完整过程fork仓库 & clone代码仓添加upstreamfetch 新分支创建新分支完成修改&#xff08;注意commit规范&#xff09;push到个人仓库创建Pull Request填写PR信息 前言 G6正在进行v4到v5的版本…