认识GCC

news/2024/11/8 3:31:41/

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.ppmy.cn/news/662240.html

相关文章

nvme ssd挂载

内置 f2进入biossystem configuration下将sata operation右侧设置为AHCIboost sequence中右侧boot list option改为UEFI后续进行磁盘挂载 #查看新添加的盘符 fdisk -l #格式化硬盘文件系统 mkfs -t ext4 /dev/nvme #挂载硬盘 mkdir /nvme mount /dev/nvme /nvme #查看UUID su…

Pythont打开 txt 格式的文件

一、Pythont如何打开 txt 格式的文件? 1.首先我使用pycharm创建一个项目,然后在这个项目里面再创建一个python的包,然后在里面创建一个demo1.txt的文件吗,里面写一些我看过的小说,然后使用python对这个txt文件进行内容…

[Python]生成 txt 文件

前段时间有位客户问: 你们的程序能不能给我们生成个 txt 文件,把新增的员工都放进来,字段也不需要太多,就要 员工姓名/卡号/员工编号/员工职位/公司 这些字段就行了,然后我们的程序会去读取这个 txt 文件,拿里面的内容,读完之后会这个文件删掉 我: 可以接受延迟吗?可能没办法实…

requirements.txt 是什么? 有什么用? 怎么用?

也许有人觉得这样的问题很愚蠢,以至于关于这个的问题网上讲解很少,一般上来都是教你如何使用,但对于一个刚踏入python 接口自动化 的小白来说, 越简单的问题越让人难以理解。 requirements.txt 文件解释: 这个文件是一…

TXT是什么格式的文件?txt文件误删如何恢复?

最近有小伙伴问小编TXT是什么格式的文件,相信你也有同款疑惑。我们在电脑桌面的任意空白处右键,就可以看到里面有一个文本文档,这就是TXT文档。关于txt文件的格式是什么,可以接着往下看。 一、TXT是什么格式的文件 TXT是一种附加到…

经典文献阅读之--R-PCC(基于距离图像的点云压缩方法)

0. 简介 对于激光雷达数据而言,虽然与2D图像相比,可以提供精确的物体深度信息,但也存在数据量大的问题,不便于数据存储或传输。在拿到离线数据分析的时候会发现我们很难拿到较长一段时间的激光数据,这就给我们问题的重…

“生鲜蔬”APP的设计与实现

1.引言 在这个科技与网络齐头并进的时代,外卖服务正在飞速发展,人们对外卖APP系统功能需求越来越多,开发APP的人员对自己的要求也要越来越高,要从所做APP外卖系统所实现的功能和用户的需求来对系统进行设计,还需要与当…

【Python 随练】编写 gotoxy() 与 clrscr() 函数

题目: 编写 gotoxy() 与 clrscr() 函数 简介: 在本篇博客中,我们将解决一个编程问题:编写 gotoxy() 与 clrscr() 函数。gotoxy() 函数用于在终端屏幕上移动光标到指定位置,而 clrscr() 函数用于清除终端屏幕上的所有…