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.rhkb.cn/news/249893.html

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

相关文章

Android系统-应用程序中的View框架

源码分析基于Android 7 应用程序中的View框架如图所示 1. View和ViewRoot 单单从名称看很容易让人产生误解,因为ViewRoot并不属于View树的一分子。源码上ViewRoot和View对象也没有继承关系。更准确说ViewRoot理解为View输的管理者,ViewRoot有一个mView成…

小米服务治理——客户端熔断器(Google SRE客户端熔断器)

目录 前言 一、什么是Google SRE熔断器 二、Google SRE 熔断器的工作流程: 三、客户端熔断器 (google SRE 熔断器) golang GRPC 实现 四、客户端熔断器 (google SRE 熔断器) golang GRPC单元测试 大家可以关注个人博客:xingxing – Web Developer …

Linux mount

挂载移动硬盘 1、通过 命令 fdisk -l 查看移动硬盘 2、创建 挂载点及文件 mkdir zen 3、mount -t ntfs /dev/sdb1 zen 报错:mount: unknown filesystem type ‘ntfs’ 需要安装ntfs-3g 如下才用编译安装方法: wget https://tuxera.com/opensource/ntf…

C语言指针学习 之 指针是什么

前言 指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

k8s安装dashboard报错CrashLoopBackOff

报错信息 使用kubectl get pods -A查看集群,出现错误: kubernetes-dashboard kubernetes-dashboard-xxxxxxxxxx6-2qrst 0/1 CrashLoopBackOff 6 15m查看日志后,发现原因: panic: Get "https://10…

Go 中 struct tag 如何用?基于它实现字段级别的访问控制

嗨,大家好!本文是系列文章 Go 小技巧第十篇,系列文章查看:Go 语言小技巧。 在 Go 中,结构体主要是用于定义复杂数据类型。而 struct tag 则是附加在 struct 字段后的字符串,提供了一种方式来存储关于字段的…

香蕉派BPI-M7 瑞芯微RK3588 人工智能开源硬件开发板公开发售

香蕉派(Banana Pi) BPI-M7瑞芯微K3588开源硬件单板计算机公开销售,支持WiFi 6和BT5.2,硬件有3个版本:8G Ram64G eMMC, 16G Ram128 eMMC和32G Ram128 eMMC 香蕉派BPI-M7采用睿芯最新旗舰RK3588八核64位处理器,最高频率为2.4GHz, 6 TOPS NPU&…

高通GAIA V3命令参考手册的研读学习(13):GAIA通知、示例以及制造商命令扩展

如前文《高通GAIA V3命令参考手册的研读学习(四)》所述,PDU一共有四种,前面已经讲了命令、回应以及错误码,现在来看最后一种:通知。 4. QTIL GAIA通知 通知发送的方向,是由设备发送到移动应用…

为客户解决痛点,电子纸增加制表功能

为客户解决痛点,电子纸增加制表功能 部分客户购买我们的电子纸后反馈效果很好,但是在配套组态软件制作电子纸模板时,遇到需要制作表格的时候比较麻烦。像是在画板作画一样,比较费时,而且效果不是很好,没办…

2024最新云渲染100使用方法,渲染100邀请码1a12,抢先体验免费渲染平台吧!

随着科技的进步,越来越多的设计师开始使用云渲染来提高工作效率,加快渲染进度,那么多的云渲染平台到底用哪家呢?今天,我就为大家介绍最具性价比的一家-渲染100,并说下它的使用方法。 一、性价比最高的云渲染…

结构体的学习

结构体与共用体,枚举 1.数据类型复习: 2结构体. eg;统计全校同学信息 需要记录的点--- 姓名,班级,性别,成绩,年龄 统计名字:char s[ ] [ 100 ] { "Tmo" } …

2024年美赛F题Problem F Reducing Illegal Wildlife Trade减少非法野生动物贸易的完整思路代码分享

非法的野生动物贸易会对我们的环境产生负面影响,并威胁到全球的生物多样性。据估计,它每年涉及高达265亿美元,被认为是全球第四大非法交易。[1]你将开发一个由数据驱动的5年项目,旨在显著减少非法野生动物贸易。你的目标是说服一个…

【数据结构 02】队列

一、原理 队列通常是链表结构,只允许在一端进行数据插入,在另一端进行数据删除。 队列的特性是链式存储(随机增删)和先进先出(FIFO:First In First Out)。 队列的缺陷: 不支持随机…

病历管理系统

技术架构: StrutsSpringHibernate 有需要该项目的小伙伴可以私信我你的Q。 功能描述: 企业财务管理系统主要用于电子病历来提高医院各项工作的效率和质量,促进医学科研、教学;减轻各类事务性工作的劳动强度,使他们…

HTML+CSS:3D轮播卡片

效果演示 实现了一个3D翻转的卡片动画&#xff0c;其中每个卡片都有不同的图片和不同的旋转角度。整个动画循环播放&#xff0c;无限次。整个页面的背景是一个占据整个屏幕的背景图片&#xff0c;并且页面内容被隐藏在背景图片之下。 Code <div class"container"…

小程序:类型三级分类

一、效果图片 二、代码 <template><view class"customPosition"><!-- header --><navBar :border"false" :hasBack"true" :title"titleName"></navBar><!-- 查询 --><view class"search…

springboot完成一个线上图片存放地址+实现前后端上传图片+回显

1.路径 注意路径 2.代码&#xff1a;&#xff08;那个imagePath没什么用&#xff0c;懒的删了&#xff09;&#xff0c;注意你的本地文件夹要有图片&#xff0c;才可以在线上地址中打开查看 package com.xxx.common.config;import org.springframework.beans.factory.annotat…

【Spark实践6】特征转换FeatureTransformers实践Scala版--补充算子

本节介绍了用于处理特征的算法&#xff0c;大致可以分为以下几组&#xff1a; 提取&#xff08;Extraction&#xff09;&#xff1a;从“原始”数据中提取特征。转换&#xff08;Transformation&#xff09;&#xff1a;缩放、转换或修改特征。选择&#xff08;Selection&…

go基础-垃圾回收+混合写屏障GC全分析

垃圾回收(Garbage Collection&#xff0c;简称GC)是编程语言中提供的自动的内存管理机制&#xff0c;自动释放不需要的对象&#xff0c;让出存储器资源&#xff0c;无需程序员手动执行。 Golang中的垃圾回收主要应用三色标记法&#xff0c;GC过程和其他用户goroutine可并发运行…

【每日一题】6.LeetCode——轮转数组

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢…