认识GCC

news2024/12/24 21:23:04

GNU

GNU是Linux系统下的一些工具包,GNU是GNU is Not Unix的缩写,因为当年Unix收费后,理查德·马修·斯托曼打算做一套GNU操作系统,当时GNU的工具包已经写好,就差内核即可组装成一个完整的操作系统,正好Linux写了一个内核,所以两者合并发布了GNU/Linux,后来传着传着就省略了名字前面的一部分,成为Linux。

我的理解:GNU就是Linux系统中的一些工具包

GNU工具

  • 编译工具:把一个源程序便以为一个可执行程序
  • 调试工具:能对执行程序进行源码或汇编级调试
  • 软件工程工具:能够协助多人开发或大型项目的管理,如make、CV
    Subvision
  • 其他工具:用于把多个目标文件连接成可执行文件的链接器。或者用作格式转换的工具

部分相关资源:

  • http://www.gnu.org
  • http://gcc.gnu.org
  • http://www.kernel.org
  • http://www.linux.org
  • http://www.linuxdevices.com
  • http://sourceforge.net/index.php

GCC

全称GNU CC,GNU项目中符合ANSI C标准的编译系统

编译如C、C++、Object C、Java、Fortran、Pascal、Modula3和Ada等多种语言

gcc是一个交叉平台编译器,比如交叉编译器gcc-arm 适合在嵌入式领域的开发编译

gcc所支持后缀名解释

  • .c C原始程序
  • .C/.cc/.css C++原始程序
  • .h 预处理文件(头文件)
  • .i 已经过预处理的C原始程序
  • .ii 已经过处理的C++原始程序
  • .s/.S 汇编语言院士程序
  • .O 目标文件
  • .a/.so 编译后的库文件

编译器的主要组件

  • 分析器:分析器键源语言程序代码 转换为汇编语言。因为要从一种格式中换为领域锤死格式(C到汇编),所以分析其需要知道目标机器的汇编语言
  • 汇编器:汇编器将汇编语言代码转换为CPU可移植性字节码
  • 链接器:链接器将汇编器生成的单独目标文件组合成可执行的应用程序。链接器需要知道这种目标格式以便工作
  • 标准C库:核心的C函数都有一个主要的C库来提供。如果在应用程序中用到了C库中的函数,这个库就会通过链接器和源代码连接来生成最终的可执行程序。

GCC的基本用法:

gcc [options] [filename]
  • -c,只编译,不连接成为可执行文件,编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
  • -o,output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就会给出预设的可执行文件 a.out
  • -g,产生符号调试工具(GNU的gdb)所必要的符号咨询,要想对源代码进行调试必须加入这个选项。
  • -O,对程序进行优化编译、连接,采用这个选项,整个代码会在编译,连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、连接的速度相应的慢一些
  • -O2,比-O更好的优化编译、连接,编译连接过程会更慢
  • -I dirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数
  • -L dirname,将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在连接的过程中使用的参数

gcc编译过程

image-20230110210754056

  1. 预处理
gcc -E main.c -o main.i

image-20230312135713634

使用wc命令查看两个文件的大小

wc main.c main.i

发现test.i增加了很多内容,主要是将include里面的内容展开放在.i文件中

image-20230312135818440

  1. 生成汇编代码
gcc -S main.i -o main.s -v

image-20230312140427238

  1. 汇编处理
gcc -c main.s -o main.o -v

image-20230312140519445

  1. 链接
gcc main.o -o main -v

image-20230312141010585

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

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

相关文章

跨链 vs 多链

跨链 dApp 可以在部署在多个不同区块链上的多个不同智能合约上运行,而多链 dApp 则可以在不同网络上以多个单独的版本部署。 由于对区块空间的需求不断增加,Web3 应用层现在存在于数百个不同的区块链、二层网络和应用链上。这种现实催生了两个新术语——…

【教程】解决php微擎中的goto加密解密,一键解密工具

今天,我将向大家揭秘一款神奇的工具——goto解密工具,轻松解密这个看似棘手的问题。 无数开发者都曾因为php中的goto功能而头疼不已。goto解密工具其中之一就是解密goto代码。通过精妙的算法和强大的解析能力,它能够解密被goto加密的代码段&…

Vue项目设置网站小徽标

一、预期效果 自定义Vue项目的网站小徽标,用于显示网站的logo,效果大致如下 二、制作 .ico文件 2.1 打开比特虫官网 比特虫官网:https://www.bitbug.net/ 2.2 操作步骤如图 三、引入Vue项目 3.1 将生成的 .ico文件放入我们的 Vue 项目 3.…

servlet+JSP与SpringBoot+Vue项目交互——servlet请求SpringBoot接口

问题 servletJSP与SpringBootVue项目交互——servlet请求SpringBoot接口 详细问题 笔者前一段时间开发一个项目,使用的技术框架是servletJSP,现阶段开发的项目技术框架为SpringBootVue,笔者现在需要输入servletJSP请求SpringBoot接口&…

C语言编程—递归

递归指的是在函数的定义中使用函数自身的方法。 举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚&…

2024考研408-计算机组成原理第六章-总线学习笔记

文章目录 前言初识总线一、总线概述1.1、总线的概述1.1.1、认识总线1.1.2、设计总线需要的特性1.1.3、总线的分类①按照数据传输格式分(串行、并行)②按照总线功能连接的总线(片内总线、系统总线、通信总线)③按照时序控制方式&am…

css新特性(五)

css基础(一)css基础(一)_上半场结束,中场已休息,下半场ing的博客-CSDN博客Emmet语法Emmet语法_上半场结束,中场已休息,下半场ing的博客-CSDN博客css基础(二)c…

Retrofit注解

1. 注解类型 Retrofit路径结合的规则 2. 网络请求方法 2.1 Get请求 完整地址:http://mock-api.com/2vKVbXK8.mock/getUserInfo?iduserid 2.1.1 Query 创建Retrofit实例必须传入baseurl(http://mock-api.com/2vKVbXK8.mock/),在GET("getUserIn…

Android跨平台语言分析

跨平台技术发展的三个阶段 第一阶段是混合开发的web容器时代 为了解决原生开发的高成本、低效率,出现了Hybrid混合开发原生中嵌入依托于浏览器的WebViewWeb浏览器中可以实现的需求在WebView中基本都可以实现但是Web最大的问题是,它的性能和体验与原生开发…

Mybatis面试题--MyBatis执行流程

首先我们知道Mybatis是目前最流行的持久层框架,当我们了解了执行流程,可以让我们理解各个组件的关系,以及Sql的执行过程(参数映射、sql解析、执行和结果处理) 1首先我们需要读取框架的核心配置文件 2接下来我们就要去操…

chatgpt赋能python:Python编程的好玩儿之处:介绍几个有趣的Python程序

Python编程的好玩儿之处:介绍几个有趣的Python程序 Python已经成为了一种非常受欢迎的编程语言,除了其在Web开发和数据科学领域的应用,它还能够完成很多好玩儿的事情!接下来,我将介绍几个有趣的Python程序&#xff0c…

【零基础入门学习Python---Python多线程和多进程】

🚀 Python 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

基于SpringBoot+vue前后端分离的相机销售系统

文章目录 项目介绍主要功能截图:首页相机详情个人中心 部分代码展示设计总结项目获取方式 🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你…

Centos7.9 磁盘分区、挂载

常用命令: fdisk /dev/vdb 创建分区 mkfs.ext2 /dev/vdb3 文件系统(ext2,ext4,xfs)格式化 mkfs.ext4 /dev/vdb3 mkfs.xfs /dev/vdb3 df -T 命令查看格式化是否成功(要先把分区挂载到目录,否则df…

18. WebGPU 计算着色器

本文接续基础知识文章。我们将从一些基本的计算着色器开始&#xff0c;然后希望继续讨论解决现实世界问题并写一些示例。 在上一篇文章中&#xff0c;制作了一个非常简单的计算着色器&#xff0c;可以将数字加倍。 这是着色器 group(0) binding(0) var<storage, read_wri…

Java安装

Java Downloads | Oracle 一直往下拉 配置环境变量 第二部分&#xff1a;idea旗舰版下载安装配置 1. 字号 file-settings-editor-font-23 &#xff0c;还有菜单字号

边坡变形监测主要用到哪些仪器

在建筑行业中&#xff0c;边坡安全问题一直备受关注&#xff0c;尤其是在地质灾害频发地区。为了预防和控制边坡失稳&#xff0c;降低对人民生命财产的危害&#xff0c;保障工程建设的顺利进行&#xff0c;边坡变形监测工作就显得尤为的重要。边坡变形监测仪器可以实时动态监测…

GSM模块(SIM900)详解

GSM模块&#xff08;SIM900&#xff09; 0. GSM概述1. 常用的GSM模块2. SIM900系列3. STM32使用SIM900系列通信方法AT指令示例代码 0. GSM概述 GSM&#xff08;全球系统移动通信&#xff09;是一种数字移动通信技术&#xff0c;是世界上最常用的移动通信标准之一。它是由欧洲电…

[Unity][疑难杂症]Mac电脑打开工程unity attempt to write a readonly database

报错的根本原因&#xff1a; 你Unity项目所在的硬盘&#xff0c;格式不是MacOS或者APFS格式&#xff0c;我的是ExFAT所以报这个错。 可能出现的问题&#xff1a; 1、删除unity项目中的c#之类的文件就会报错&#xff0c;并且强制退出 2、新项目压根打不开&#xff0c;在生成资源…

【学习笔记】Unity基础(九)【cinemachine基础(body、aim参数详解)】(多fig动图示范)

目录 一 速览1.1 cinemachine下载1.2 官方示例速览1.3 cinemachine定义 二 cinemachine详解2.1 Virtual Camera2.1.1 virtual camera参数通览2.1.2 Status2.1.3 有关Dutch angle2.1.4 Standby Update2.1.5 Transitions 2.2 virtual cameral关键参数详解2.2.1 Body2.2.1.1 Do No…