Linux下gcc的使用与程序的翻译

gcc和程序的翻译过程

  • gcc介绍
  • 程序的翻译过程
    • 预编译
    • 编译
    • 汇编
    • 链接
  • 命令行式宏定义

gcc介绍

gcc是一款编译C语言编译器,可以把我们用vim写的代码编译成可执行程序。编译C++用g++进行编译,C++的文件后缀是test.cc或test.cpp或test.cxx
如果要安装g++就执行以下命令

sudo yum install gcc-c++//g++内核底层是gcc

在这里插入图片描述
gcc + 程序 就会形成可执行文件,默认是a.out,如果目录下已经存在,那么就会把a.out覆盖掉。

gcc -o + newname + 程序:给编译后的可执行程序重命名
gcc + 程序 -o + newname:给编译后的可执行程序重命名在这里插入图片描述

程序的翻译过程

程序的翻译过程包括预编译,编译,汇编和链接

预编译

预编译就是把程序进行宏替换,去注释等等,把代码变简单,预编译过后还是C语言文件

通过vim写下面一串代码,演示预编译的过程
在这里插入图片描述

gcc -E test.c -o newname//预处理命令
通过上述命令把生成的预编译文件写进新建的文件,建议后缀为“ .i ”,如果没有新的文件名,那么新建的文件就会打印在屏幕上。
在这里插入图片描述

用vim打开预编译后的文件,发现头文件展开了,宏被替换了,注释也没有了
在这里插入图片描述

编译

编译的过程是进行语法检查的过程,然后把C语言编译成汇编语言

gcc -S 预编译过的文件 -o newname//生成汇编文件的命令
也可以直接从c文件直接变为汇编文件
在这里插入图片描述

用vim打开刚刚生成的文件,里面就是汇编语言
在这里插入图片描述

汇编

把汇编语言编译成为二进制目标文件

gcc -c 汇编过的文件 -o newname//生成可重定位目标文件的命令
Windows里面生成的文件就是obj为后缀的文件,就是目标文件
在这里插入图片描述

链接

把库函数和我们的程序链接起来形成可执行程序

gcc test.o -o newname
也可以直接gcc test.o 后面什么都不加,直接形成可执行程序,这就是链接的过程
上述命令和最开始一部形成可执行文件一样,都是gcc + 文件
在这里插入图片描述

命令行式宏定义

如图,没有v1 的宏定义,但是可以通过命令行式的定义宏
gcc -D v1 test.c
如图2,这种定义宏的方式,可以更方便的改变宏
在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# winform 多语言(json)方式实现

前后对比 使用nuget json工具包1.总体思路 创建对应的json字典对照表 { "测试":"Test", "语言":"Language", "设置":"Set", "中文(默认)":"Chinese (default)", "英文":"E…

【HarmonyOS应用开发】ArkTS 属性动画的使用(十二)

一、概述 属性动画,是最为基础的动画,其功能强大、使用场景多,应用范围较广。常用于如下场景中: 一、页面布局发生变化。例如添加、删除部分组件元素。二、页面元素的可见性和位置发生变化。例如显示或者隐藏部分元素&#xff0…

CANoe学习笔记——窗口类型

CANoe中的窗口类型,共分为三种 1:MDI windows 2:Standard Windows 3:Docking Windows 窗口有多种类型,每种类型都定义了特定的窗口行为。通过点击窗口顶部的区域,可以更改窗口类型。 如下图&#xff0…

Python的requests库与HTTP代理的使用:魔法般的网络探险之旅

嘿,各位魔法探险家们!今天我们要一起探索Python的requests库与HTTP代理的神奇组合,开启一段魔法般的网络探险之旅! 首先,我们要明白什么是requests库。简单说,requests库就是Python中的魔法飞毯&#xff0…

Linux基础知识合集

整理了一下学习的一些关于Linux的一些基础知识,同学们也可以通过公众号菜单栏查看! 一、基础知识 Linux基础知识 Linux命令行基础学习 Linux用户与组概念初识 Linux文件与目录权限基础 Linux中文件内容的查看 Linux系统之计划任务管理 二、服务器管理 Vm…

MySql主从同步,同步SQL_ERROR 1032解决办法

1.登录从库 mysql -u root -p 2.输入命令查看状态 SHOW SLAVE STATUS\G; 3.找到对应的错误数据位置 Slave_IO_Running: YesSlave_SQL_Running: NoReplicate_Do_DB: app_push_centerReplicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Tabl…

“欢天喜地迎新春”下姜村邻里守望写对联活动

卯兔追冬去,辰龙报春来。空谷幽香谱佳期,红联金句寄吉祥。春联是我国特有的文学形式,贴春联是继承传统习俗的一种方式,是对祖先的尊敬,对传统的继承。春节前夕,家家户户贴上红红的春联,一副副透…

西圣Olite开放式耳机持续100+天霸榜:品质优势再掀数码狂潮

随着开放式耳机的市场竞争加剧,用户对耳机的音质和配置要求越来越高。而西圣开放式耳机的不断推陈出新,正是对客户需求的完美回应!西圣开放式耳机,在现在鱼龙混杂的市场上,能够获得着卓越的研发成果并且还在不断的追求…

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库

目录 参考前面发的几篇文章http识别车牌,sqlite3数据库、摄像头的文章 步骤 部分代码 新建一个项目,加入前面用到的http和image两个文件,和加入用到的模块和头函数和成员,加入前面用到的全局变量 配置ui界面 在构造函数中初…

Qt5 基于OpenGL实现六轴机械臂三维仿真

需求 在Qt中通过OPenGL方式加载三维模型STL文件,然后将多个结构的STL文件类型的模型进行组装,形成6轴机械臂三维模型的显示,并且可以对每个关节进行关节角度的控制。 新建一个C类STLFileLoader,用于加载STL文件,并进…

IP协议(2) 和 数据链路层协议基础

IP协议续 1.路由选择 在复杂的网络结构中,我们需要找到一个通往终点的路线,这就是路由选择 举个例子:我们在没有手机导航之前,想去一个地方得是到一个地方问一下路的方式最终找到目的地 路由的过程,其实就是样子问路的过程 1.当IP数据包到达路由器的时候,会查看目的IP 2.路由器…

Jmeter高级使用

文章目录 JMeter之计数器JMeter之集合点JMeter之断言JMeter之动态关联后置处理器:正则表达式提取器 JMeter之分布式测试JMeter之组件执行顺序元件的作用域元件的执行顺序配置元件Http Cookie管理器 多协议接口的性能测试Debug采样器Http请求中文乱码的解决Post参数设…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)

专属领域论文订阅 关注{晓理紫|小李子},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 如果你感觉对你有所帮助,请关注我,每日准时为你推送最新论文。 为了答谢各位网友的支持,从今日起…

Java_简单模拟实现ArrayList_学习ArrayList

文章目录 一、 了解线性表和顺序表区别1.线性表2.顺序表 二、模拟实现1.定义接口2.定义MyArrayList3.成员变量以及构造方法4.实现打印数组5.实现add方法6.实现查找某个数是否存在contains或者某个数的下标indexOf7.获取或更改pos位置的值 get和set8.获取数组大小 size9.删除某个…

Git版本管理工具(实战进阶):零基础到起飞实战项目完整篇 →Git学习一篇就够 从基本指令、到本地仓库、远程仓库、实战项目开发演练介绍超详细!

heima 李师傅最新版 Git的讲解 文章目录 Git在实战项目开发使用功能学习01.Git 初识02.Git 仓库03.Git 的三个区域04.Git 文件状态05.Git 暂存区作用06.练习-登录页面07.Git-切换版本08.删除文件09.忽略文件10.分支的概念11.练习-登录 bug 修复12.分支-合并与删除13.分支-合并与…

循环神经网络RNN专题(01/6)

一、说明 RNN用于处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么&a…

【演讲比赛流程管理系统(C++版)】

一、演讲比赛程序需求 1.1、比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如10001~10012 比赛方式:分组比赛,每组6个人 第一轮分为两个小组&a…

【深度测试】如何分析脚本以及对脚本进行测试

线上会存在一种任务,定时或者手动出发,我们称之为“脚本”,也可以称之为“job” 一、脚本的特性 无过程:只有开始和结束,过程迅速且黑盒。无交互:脚本处理的业务场景都几乎没有交互,只有数据被…

算法篇之二分

二分算法简介 特点 最简单的一种算法,也是最恶心,细节最多,最容易写出死循环的算法时间复杂度O(logN) 如何学习 明白其中的算法原理,二分并不是只有数组有序的的时候使用,而是看是否具有二段性。模板 朴素的二分模…

TCP TIME_WAIT 过多怎么处理

文章目录 1.什么是 TCP TIME_WAIT?2.为什么要 TIME_WAIT?3.TIME_WAIT 过多的影响4.解决办法4.1 调整短连接为长连接4.2 调整系统内核参数 5.小结参考文献 1.什么是 TCP TIME_WAIT? TCP 断开连接四次挥手过程中,主动断开连接的一方&#xff…