GCC 介绍
Posted coder_up
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCC 介绍相关的知识,希望对你有一定的参考价值。
1. gcc支持编译的一些源文件后缀名
后缀 | 源文件 |
---|---|
.c | c语言源文件 |
.C .cc .cxx | c++源文件 |
.m | Object-C源文件 |
.i | 经过与处理后的C源文件 |
.ii | 经过预处理后的C++源文件 |
.s .S | 汇编语言源文件 |
.h | 预处理文件(头文件) |
.o | 目标文件 |
.a | 存档文件 |
2. gcc 编译程序的流程
源文件
(hello.c)——>预处理
(预处理器)——>编译
(编译器)——>汇编
(汇编器)——>链接
(连接器)——>可执行文件
(executefile)
Tips:
- Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可
sudo chmod u+x excutefile
- 作为Linux程序员,我们可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)
3. gcc 到底背着我们做了什么
1.
首先gcc会调用预处理程序cpp,由它负责展开在源程序中定义的宏(上例:#include ),向其中插入#include语句所包含的内容(原地展开stdio.h包含的代码)
1. 获得预处理后的文件
$ gcc -E hello.c -o hello.i
gcc的-E参数可以让gcc在预处理结束后停止编译过程。
hello.i这是一个经过预处理器处理之后的C源文件
2. 将*.i文件编译为目标代码
$ gcc -c hello.i -o hello.o
gcc默认将.i文件看成是预处理后的C语言源代码,因此它会直接跳过预处理,开始编译过程。(之后它就是二进制文件了)
Tips:
- 请记住,gcc预处理源文件的时候(第一步),不会进行语法错误的检查
- 语法检查会在第二步进行,比如花括号不匹配,行末尾没有分号,关键字错误等......
3. 连接器将目标文件链接为一个可执行文件
$ gcc hello.o -o hello
4. gcc 编译模块化的程序
gcc hello_print.c hello_main.c -o hello可以看成是执行了一下3条命令
gcc -c hello_print.c -o hello_print.o
gcc -c hello_main.c -o hello_main.o
gcc hello_print.o hello_main.o -o hello
这样如果一个团队一起开发 每个人只要编译一个.so文件 最后一链接就好了,不会一个人修改后,然后还有一起在从新编译一遍!
以上是关于GCC 介绍的主要内容,如果未能解决你的问题,请参考以下文章