GCC编译器介绍及编译流程说明

server/2024/9/24 8:06:21/

一、计算机基础

1、冯诺依曼模型

1945年冯诺依曼和一些科学家提出了一份报告,报告遵循了图灵机的设计,并提出用电子元件构造计算机,约定了用二进制进行计算和存储,并且将计算机结构分成运算器,控制器、存储器、输入设备、输出设备等5个部分。这几个部分组成了计算机的硬件

在这里插入图片描述

主存储器 :我们也叫内存,程序中待处理的数据和处理的结果都存储在内存中
外存储器 : 常用就是硬盘,是用来长期保存数据的大容量存储器
寄存器 : CPU内部的高速存储器,速度快,数目少

2、程序语言发展历史

在这里插入图片描述

机器语言 : 即二进制,直接使用机器指令(0,1序列)来设计程序,可以被计算机系统直接识别。和自然语言完全不同,难于记忆和理解,工作量大,效率低,无法移植
在这里插入图片描述
汇编语言 : 把机器指令符号化,即通过一组简单的的符号来表示机器指令,更接近于自然语言,更容易理解和使用。 和机器语言一样,开发工作量大,无法移植
在这里插入图片描述
高级语言 :与特定的计算机系统无关,更接近于人类自然语言。一条语句对应多条机器指令,工作量小,开发效率高。 常用的解析性语言有python,shell,Ruby。常用的编译型语言有C,C++,JAVA等。

  • 编译性语言:将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。所以执行效率高,但是与特定平台有关,需要想办法移植。

  • 解释性语言:不同的平台只要提供相应的解释器,就可以运行源代码,解释器是对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。所以效率相对较低,但是书写相对接单方便源程序移植。

二、GCC编译器介绍

GCC它是由GNU开发的编程语言编译器。它是GNUCompiler
Collection的缩写。可以用来编译C,C++,Object-C等多种语言。

它是Linux下提供一般用户使用的标准编译器。

1、gcc编译器的使用

  • 安装指令
	sudo apt-get install gcc
  • 使用系统生成的可执行文件

gcc hello.c编译代码,系统默认会在当前目录下,生成一个叫做a.out的文件

./a.out执行a.out文件,输出对应的结果.

在这里插入图片描述

  • 用户自定义可执行文件

gcc hello.c -o exec编译代码,用户自定义生成的可执行文件名字

./exec执行./exec文件,输出对应的结果.

在这里插入图片描述

2、gcc编译器的流程

在这里插入图片描述

• -E 使编译器在预处理结束的时候停止
• -S 使编译器在编译结束的时候停止
• -c 使编译器在汇编结束的时候停止
• -o 输出gcc编译的结果

  • 预处理---->生成我预处理过得C代码 xx.i
	gcc -E xx.c -o xx.i

在这里插入图片描述

在这里插入图片描述

  • 编译---->把我们预处理过的代码生成我们的汇编代码 xx.s
	gcc -S xx.i -o xx.s

在这里插入图片描述

在这里插入图片描述

  • 汇编---->把汇编代码生成我们的目标文件 xx.o
	gcc -c xx.s -o xx.o

在这里插入图片描述

  • 链接---->把我们的目标文件生成我们的可执行文件
	gcc xx.o -o xx

在这里插入图片描述


http://www.ppmy.cn/server/20359.html

相关文章

旅游网站制作流程

旅游网站制作流程是一个较复杂的过程,因为它需要结合市场调研、用户需求、内容构建、技术开发等多个方面。在这篇文章中,我将简单介绍一下旅游网站的制作流程,大致分为以下步骤。 第一步:市场调研 在制作旅游网站前,我…

数据结构:实验六:图的操作

一、 实验目的 (1)掌握图的邻接矩阵和邻接表存储结构。 (2)熟练图的邻接表的基本运算。 (3)加深图的深度优先遍历算法和广度优先遍历算法的理解 二、 实验要求 有下图所示的带权有向图及其对应的邻…

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(十)

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(十) Llama 推理 为了对模型进行推理, 需要从Meta的LLaMA 3仓库下载模型的权重。 编写模型推理的代码。在推理模型时,有许多可调参数需要考虑,包括…

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下: 注意 basedir 和 datadi…

【机器学习原理】决策树从原理到实践

基于树的模型是机器学习中非常重要的一类模型,最基础的就是决策树,本篇主要讲述决策树的原理和几类最常见的决策树算法,这也是更复杂的树模型算法的基础。 参考文章: 1.CSDN-基于熵的两个模型(ID3,C4.5)比较详细,有数字…

什么ISP是住宅IP,和普通IP有什么区别?

ISP(Internet Service Provider)即互联网服务提供商,是向广大用户综合提供互联网接入业务、信息业务和增值业务的电信运营商。住宅IP,也称为家庭IP,是指由ISP分配给家庭或个人用户的IP地址。这些IP地址是真实的&#x…

Qt——实现滚动条添加小组件自动跳转到最后

为了使滚动区域在您添加新的控件后自动滑动到底部,显示新增的窗口,您可以利用 Qt 的 QScrollArea 的滚动条进行调整。在您的 DWidget::toggleNewAdd 函数中,添加窗口到布局后,可以通过调整滚动区的滚动条到最大值来实现这一点。 …

GateWay具体的使用之全链路跟踪TraceId日志

1.创建全局过滤器,在请求头上带入traceId参数,穿透到下游服务. package com.by.filter;import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.jwt.JWTValidator;…