GCC/G++详解

news2024/10/5 18:30:49

文章目录

  • GCC/G++
    • 编译
    • gcc是如何完成的
      • 预处理
      • 编译
      • 汇编
      • 链接
    • 编译流程

GCC/G++

编译

  1. C语言源文件可以使用gcc和g++编译(优先选择gcc)

    • gcc test.c -o mybin / gcc -o mybin test.c
      基于test.c文件生成可执行程序mybin
    • g++ tes.c -o mybin / g++ -o mybin test.c
      基于test.c文件生成可执行程序mybin
  2. C++源文件只能使用g++进行编译

    • g++ code.cpp -o mybin / g++ -o mybin code.cpp
      基于code.cpp文件生成可执行文件mybin

gcc是如何完成的

预处理

预处理的主要作用是进行宏替换
  • 预处理功能主要包括头文件展开、宏定义、条件包含、条件编译、去除注释等
  • 预处理的指令是以#开头的代码行

头文件展开
头文件展开是指,在预处理的时候,将头文件里面的内容拷贝到源文件中。

条件编译
通过给编译一起传递不同的宏值,来进行对代码的动态裁剪。

编译

编译的主要作用是生成汇编文件
  • 在这个阶段中,gcc首先检查代码的规范性、是否存在语法错误等,以确定代码的实际要做的工作,在检查无误之后,gcc把代码翻译为汇编语言

汇编

生成机器可识别代码
  • 汇编阶段是把编译阶段生成的.s文件转成目标文件

链接

生成可执行文件或者库文件
将代码与库文件进行链接形成可执行文件

编译流程

预处理 -> 编译 -> 汇编 -> 链接

  1. 预处理
    • gcc -E code.c -o code.i
      • 执行指令,从现在开始进行程序的翻译过程,当预处理完成之后停下来,预处理之后生成的信息存入到临时文件code.i文件中
      • 选项-E,这个选项的作用是让gcc在预处理结束后停止编译过程
      • 选项-o,是指目标文件
      • .i文件为已经经过预处理的c原始程序
  2. 编译
    • gcc -S code.i -o code.s
      • 执行指令,从现在开始进行程序的翻译过程,当编译工作完成之后停下来,生成的信息写入到临时文件code.s中
      • 选项-S,该选项只进行编译但不进行汇编,生成汇编代码
  3. 汇编
    • gcc -c code.s -o code.o
      • 执行指令,从现在开始进行程序的翻译过程,当汇编工作完成之后停下来,生成的信息写入到临时文件code.o中
      • 选项-c,可以看到已经转换为.o的二进制目标代码
  4. 链接
    • gcc -o mybin code.o
      执行指令,生成可执行文件mybin

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

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

相关文章

【C语言】多字节字符、宽字符(涉及字符集和编码)

字符集、编码: 字符集:一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。例如:ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ... 编码方式:符号…

在H5开发App应用程序过程中的一些常见问题

哈喽,大家好呀,淼淼又来和大家见面啦,H5开发是一种可以跨平台、跨设备、且可以在各种设备上运行,无需安装额外的应用程序。最近有许多小伙伴跟我聊到在h5开发App应用程序的过程中遇到了一些问题,今天我们就这些问题来做…

【数学建模】最优旅游城市的选择问题:层次分析模型(含MATLAB代码)

层次分析法(The analytic hierarachy process,简称AHP)是一种常用的决策分析方法,其基本思路是将复杂问题分解为多个组成部分,然后对这些部分进行逐一评估和比较,最后得出最优解决方案。(例如&a…

【Linux】创建IDEA桌面快捷方式

Linux系统安装IDEA保姆级教程_linux安装idea-CSDN博客 在Ubuntu上安装Intellij IDEA并创建桌面快捷方式 - 极客子羽 - 博客园 (cnblogs.com) 下载安装包解压到指定目录 /opt/softWare 进入bin目录,ll查看 桌面打开终端,创建文件 touch idea.desktop s…

[大模型]Qwen-7B-hat Transformers 部署调用

Qwen-7B-hat Transformers 部署调用 环境准备 在autodl平台中租一个3090等24G显存的显卡机器,如下图所示镜像选择PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8 接下来打开刚刚租用服务器的JupyterLab,并且打开其中的终端开始环境配置、模型下…

C++初阶学习第一弹——C++入门(上)

前言: 很高兴,从今天开始,我们就要步入C的学习了,在这之前我们已经对C语言有了不错的了解,对数据结构也有了一些自己的认识,今天开始,我们就进入这个新的主题的学习——C 目录 一、C的发展即其特…

Redis教程——数据类型(有序集合、位图)

上篇文章我们学习了Redis教程——数据类型(哈希、集合),这篇文章学习Redis教程——数据类型(有序集合、位图) 有序集合ZSet 有序集合和集合都是string类型的无序集合,其数据是唯一,都是通过哈…

华为路由器基于接口限速

一、背景 ISP与企业内网通过华为路由器接入Internet时,当大量流量进入路由器时,可能会因为带宽不足产生拥塞,导致丢包,严重影响用户上网体验。对于此需要对网络流量进行限制,其方式通常有防火墙带宽策略、路由器基于接口限速等。 二、华为路由器基于接口限速方式 在路由…

代码随想录算法训练营第四十四天| LeetCode70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

一、LeetCode 70. 爬楼梯 (进阶) 题目链接/文章讲解/视频讲解:https://programmercarl.com/0070.%E7%88%AC%E6%A5%BC%E6%A2%AF%E5%AE%8C%E5%85%A8%E8%83%8C%E5%8C%85%E7%89%88%E6%9C%AC.html 状态:已解决 1.思路 这道题跟70.爬楼…

如何在深度学习中调用CAME

1、介绍 CAME:一种以置信度为导向的策略,以减少现有内存高效优化器的不稳定性。基于此策略,我们提出CAME同时实现两个目标:传统自适应方法的快速收敛和内存高效方法的低内存使用。大量的实验证明了CAME在各种NLP任务(如BERT和GPT-2训练)中的…

【python】直接在python3下安装 jupyter notebook,以及处理安装报错,启动不了问题

目录 问题: 1 先做准备,查看环境 1.1 先看python3 和pip ,以及查看是否有 juypter 1.2 开始安装 1.3 安装完成后得到警告和报错 2 处理安装的报错问题 2.1 网上有说是因为 pip 自身需要更新,更新之 2.1.1 更新pip 2.1.…

vue快速入门(三十二)局部与全局注册组件的步骤

注释很详细&#xff0c;直接上代码 上一篇 新增内容 局部注册组件全局注册组件 文件结构 源码 MyHeader.vue <!-- 用于测试全局注册组件 --> <template><div><h1>又可以愉快的学习啦</h1></div> </template><script>export d…

开启Three.js之旅(会持续完善)

文章目录 Three.js必备构建项目场景Scene相机CameraPerspectiveCamera 渲染器WebGLRendererCSS3DRenderer 灯光LightAmbientLightDirectionalLight 平行光PointLight 加载器CacheFileLoaderLoaderGLTFLoaderRGBELoaderTextureLoader 材质MetarialMeshBasicMaterialMeshLambertM…

武汉星起航:上海股权中心成功挂牌,创始人张振邦领航跨境新纪元

在金秋十月的尾声&#xff0c;上海股权托管交易中心迎来了一场备受瞩目的盛事。2023年10月30日&#xff0c;武汉星起航电子商务有限公司成功挂牌展示&#xff0c;正式登录资本市场&#xff0c;开启了一段崭新的发展篇章。这一里程碑式的跨越&#xff0c;不仅标志着武汉星起航在…

MySQL基础-----约束详解

目录 一. 概述: 二.约束演示&#xff1a; 三.外键约束&#xff1a; 3.1介绍&#xff1a; 3.2外键约束语法&#xff1a; 3.3删除&#xff0c;更新行为&#xff1a; 一. 概述: &#x1f9d0;&#x1f9d0;概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制…

【机器学习】数据变换---小波变换特征提取及应用案列介绍

引言 在机器学习领域&#xff0c;数据变换是一种常见且重要的预处理步骤。通过对原始数据进行变换&#xff0c;我们可以提取出更有意义的特征&#xff0c;提高模型的性能。在众多数据变换方法中&#xff0c;小波变换是一种非常有效的方法&#xff0c;尤其适用于处理非平稳信号和…

会话seesion的使用,结合ddddocr识别简单验证码的登录实现。

古诗文网登录代码&#xff1a; # 古诗文网登录实战 # 验证码链接:https://so.gushiwen.cn/RandCode.ashx # 变动参数链接:__VIEWSTATE所在的地址:https://so.gushiwen.cn/user/login.aspx?fromhttp://so.gushiwen.cn/user/collect.aspx # 登录接口链接:https://so.gushiwen.c…

npx\pnpm 镜像过期解决方法

. // 1. 清空缓存 npm cache clean --force // 2. 关闭SSL验证 npm config set strict-ssl false // 3. 安装 到这里就可以正常使用npm命令安装需要的工具了。如( npm install -g cnpm )

代码学习记录48---单调栈

随想录日记part48 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.19 主要内容&#xff1a;今天开始要学习单调栈的相关知识了&#xff0c;今天的内容主要涉及&#xff1a;503.下一个更大元素II ;42. 接雨水 503.下一个更大元素II 42. 接雨水 Topic1下一个更…

第二部分 Python提高—GUI图形用户界面编程(六)

其他组件学习 文章目录 OptionMenu 选择项Scale 移动滑块颜色选择框文件对话框简单输入对话框通用消息框ttk 子模块控件 OptionMenu 选择项 OptionMenu(选择项)用来做多选一&#xff0c;选中的项在顶部显示。显示效果如下&#xff1a; from tkinter import * root Tk();ro…