1、GCC是什么
GCC(GNU Compiler Collection,GNU 编译器套件),是由 GNU 开发的编程语言编译器。GCC 原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如 Linux、BSD、Mac OS X 等)采纳为标准的编译器,GCC 同样适用于微软的 Windows。GCC 最初用于编译 C语言,随着项目的发展 GCC 已经成为了能够编译 C、C++、Java、Ada、fortran、Object C、Object C++、Go 语言的编译器大家族。这里只是简单介绍如何编译 C 程序或者 C++ 程序最终成为一个可执行程序
gcc识别的文件扩展名如下:
.c C 语言文件
.i 预处理后的 C 语言文件
.C、.cc、.cp、.cpp、.c++、.cxx C++语言文件
.ii 预处理后的 C++ 语言文件
.S 汇编文件(用户自己新建的汇编文件)
.s 预处理后的汇编文件
.o 编译后的目标文件
.a 目标文件的静态链接库(链接时使用)
.so 目标文件的动态链接库(链接、运行时使用)
2、安装GCC
Linux 默认没有 gcc 编译器,需要自己安装,在线安装,执行 yum -y install gcc命令
![](https://img-blog.csdnimg.cn/img_convert/8ed7ac3759bf22db40935a10d2df4ba1.png)
使用whereis gcc命令查看安装以及查看版本
![](https://img-blog.csdnimg.cn/img_convert/75229a1ec2730b3afa6feb6c79163ab4.png)
3、GCC 工作流程
GCC 编译器对程序的编译分为 4 个阶段:预处理(预编译)、编译和优化、汇编和链接。gcc编译.c文件(c语言程序),g++编译.cpp文件(c++程序)。GCC 的编译器可以将这 4 个步骤合并成一个。 先介绍一个每个步骤都分别做了写什么事儿:
预处理:在这个阶段主要做了三件事: 展开头文件 、宏替换 、去掉注释行( 这个阶段需要 GCC 调用预处理器来完成,最终得到的还是源文件,文本格式)
编译:这个阶段需要 GCC 调用编译器对文件进行编译,最终得到一个汇编文件
汇编:这个阶段需要 GCC 调用汇编器对文件进行汇编,最终得到一个二进制文件
链接:这个阶段需要 GCC 调用链接器对程序需要调用的库进行链接,最终得到一个可执行的二进制文件
![](https://img-blog.csdnimg.cn/img_convert/767bde3543ca3e37639fb4984176482f.png)
![](https://img-blog.csdnimg.cn/img_convert/b572444a86523b55493559a5f2aeb9af.png)
4、GCC常用参数
gcc 编译选项 | 选项的意义 |
-E | 预处理指定的源文件,不进行编译 |
-S | 编译指定的源文件,但是不进行汇编 |
-c | 编译、汇编指定的源文件,但是不进行链接 |
gcc 常用编译应用实例
1)gcc -E hello.c -o hello.i
2)gcc -S hello.i -o hello.s
3)gcc -c hello.s -o hello.o
4)gcc hello.o -o hello_elf
编译选项说明:
-o file指定生成的输出文件名为 file
-E只进行预处理
-S只进行预处理和编译
-c只进行预处理、编译和汇编
文件名后缀说明:
.c C 语言文件
.i 预处理后的 C 语言文件
.s 预处理后的汇编文件
.o 编译后的目标文件
![](https://img-blog.csdnimg.cn/img_convert/3ce5310f4a9a034f5ffba730aedc727e.jpeg)
5、Gedit 编辑器
在 Linux 下,很多程序员都推崇使用 Vim、Emacs 等命令行模式的编辑器,它们功能强大,逼格够高,不管有没有桌面环境都能使用,是 Linux C/C++ 程序员必备的神器。但是 Vim 和 Emacs 并不容易上手,使用者需要记忆很多命令和快捷键,熟练才能生巧,所以需要一段时间的学习和适应,这会增加初学者的学习成本,所以这里不推荐大家使用。
CentOS 下有一款自带的图形界面编辑器,叫做 Gedit。Gedit 是一款简单实用的文本编辑器,界面优雅,支持语法高亮,比 Vim 容易上手,它和 Windows 下的编辑器没有什么两样,比如我们使用 gedit 命令编辑 hello.c,Ctrl+S保存文件,就完成了源代码的编辑工作。
![](https://img-blog.csdnimg.cn/img_convert/a5ad7c5b957f76cd2284c1d9c7dae68b.png)
1、生成可执行程序,执行命令gcc,这样就一次性完成了编译和链接的全部过程,非常方便。
![](https://img-blog.csdnimg.cn/img_convert/042a308556f66e9252be2f7149c93c36.png)
注意:不像 Windows,Linux 不以文件后缀来区分可执行文件,Linux 下的可执行文件后缀理论上可以是任意的,这里的.out只是用来表明它是 GCC 的输出文件。不管源文件的名字是什么,GCC 生成的可执行文件的默认名字始终是a.out
![](https://img-blog.csdnimg.cn/img_convert/102233eef4d84841dab85be4b9b85741.png)
因为 Linux 下可执行文件的后缀仅仅是一种形式上的,所以可执行文件也可以不带后缀,例如:
![](https://img-blog.csdnimg.cn/img_convert/93ee308958b997fe5aaea41cc9a721fe.png)
2、运行可执行程序
![](https://img-blog.csdnimg.cn/img_convert/4b21b4861038ceffcf913322c3f62ea1.png)
大名鼎鼎,大吉大利,大红大紫,大显身手,大鸣惊人